Java的反射机制中, 类有Class对应,类的方法有Method对应,属性与Field对应。
Class
Class类表示Java对象的类型
获得Class对象
- 每一个对象调用getClass()方法取得这个对象的Class类型
- Class的静态方法forName(String className)
- Class对象调用getSuperclass()方法
- Java对象调用.class属性
- 基本类型的.TYPE属性
获得Class的构造方法
- Constructor getConstructor(Class[] params) 根据构造函数的参数,返回一个具体的具有public属性的构造函数
- Constructor getConstructors() 返回所有具有public属性的构造函数数组
- Constructor getDeclaredConstructor(Class[] params) 根据构造函数的参数,返回一个具体的构造函数(不分public和非public属性)
- Constructor getDeclaredConstructors() 返回该类中所有的构造函数数组(不分public和非public属性)
1 2 3 |
Class[] params = new Class[2]; params[0] = Integer.TYPE; params[1] = Integer.TYPE; |
获得类的成员方法
- Method getMethod(String name, Class[] params) 根据方法名和参数,返回一个具体的具有public属性的方法
- Method[] getMethods() 返回所有具有public属性的方法数组,包含从父类继承的方法
- Method getDeclaredMethod(String name, Class[] params) 根据方法名和参数,返回一个具体的方法(不分public和非public属性)
- Method[] getDeclaredMethods() 返回该类中的所有的方法数组(不分public和非public属性),不包含从父类继承的方法
获得类的成员变量(成员属性)
- Field getField(String name) 根据变量名,返回一个具体的具有public属性的成员变量
- Field[] getFields() 返回具有public属性的成员变量的数组
- Field getDeclaredField(String name) 根据变量名,返回一个成员变量(不分public和非public属性)
- Field[] getDelcaredField() 返回所有成员变量组成的数组(不分public和非public属性)
其它方法
- newInstance()方法,返回无参构造方法的实例,有参需要调用Constructor的newInstance方法
Modifier
类Class、Method、Constructor、Field都有一个public方法int getModifiers()。
返回的int值调用Modifier的静态方法isXXX, 可以确定该类,方法,属性的修饰符(public,static,native)
方法调用
执行由反射获取的方法, 并且调用一个类的方法,首先需要一个该类的实例
- 由Class类获取到Method对象
- Method对象调用Object invoke(Object receiver, Object… args), 第一个参数是该方法所属的Class实例(静态方法可以为null), 第二个参数是该方法的参数
1 2 3 4 5 6 7 8 |
Object instance = class.newInstance(); Class[] params = new Class[2]; params[0] = Integer.TYPE; params[1] = Integer.TYPE; // 找到 Method method = plugClass.getMethod("add", params); // 执行 method.invoke(instance, 1, 2); |
0 Comments