java反射机制

什么是java反射机制

java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

定义听上去比较绕口,实际还是比较好理解的。一般就是用配置文件+实现接口来实现。应用程序读取配置文件,配置文件存着类名,之后应用程序根据类名找到对应的class。

比如tomcat加载servlet的过程,tomcat提供servlet接口,然后我们写的servlet类实现servlet接口,之后将servlet名配置到web.xml文件中,当tomcat启动时会加载web.xml中配置的servlet类。这个过程就是一个反射过程。

反射过程实现

首先应用程序通过外部配置文件中找到class文件,通过class类,拿到这个类的类型信息,利用反射拿到这个类的方法属性。

拿到Class对象

Class cls = Class.forName("Hello");//拿到Hello类
Object o = cls.newInstance();//创建实例

得到构造器:

Class cls = Class.forName("Hello");
Constructor cons = cls.getConstructor(String.class,int.class);//带参数构造函数
object obj = cons.newInstance("hello",10);

得到成员变量:

Class cls = Class.forName("Hello");
Field field = cls.getDeclaredField("name");//只能获取本类,但包含私有的。
field.setAccessible(true); //对私有字段的访问取消权限检查。     

得到类方法:

Class cls = Class.forName("Hello");
Method m = cls.getMethod("getName", null);
Object name = m.invoke(obj, null);

更多

上面只是几个简单的用法,更多用法还参考API文档。主要是理解原理,原理懂了,需要使用时直接查文档就ok了。

请他喝杯咖啡