一 什么是反射机制?
访问已经装载到JVM中类或者对象的信息的机制称作反射机制。
二 Class
1.使用反射机制的第一步就是获得类或者对象在JVM中的对象,有三种方式:
⑴利用全限定性类名,调用forName方法创建:
Class c=Class.forName("全限定性类名");
⑵利用该类的对象获取:
Object obj=new Object(); Class c=obj.getClass();
⑶直接使用类名创建:
Class c=Object.class;//任何数据类型包含基本数据类型都有一个class属性
2.相关方法
- newInstance():调用无参构造方法创建对象,利用类只能通过无参构造方法创建对象,如果希望通过有参构造方法创建对象,必须借助构造方法。
- Constructor[] getConstructors:获得所有权限为public的构造方法。
- Constructor[] getConstructor(Class...parameterTypes):获得具有指定类型参数的构造方法。
- Constructor[] getDeclaredConstructors:获得所有构造方法,包括private方法。
- Method[] getMethods:获得所有权限为public的方法。
- Field[] getFields:获得所有权限为public的成员变量。
三 Constructor
- Class[] getParameterTypes:按照声明顺序以数组的形式返回构造方法中各参数的类型。
- int getParameterCount:返回构造方法中参数的数目。
- newInstance(Object...initargs):向该构造方法传入初始值创建对象。
- getModifiers:返回代表构造方法修饰符的整数,一个整数包含多种权限修饰符的信息。再次调用静态方法解析,可以查看构造方法的修饰符。
- setAccessible(true):将private构造方法转化为public类型的,就可以利用该构造方法创建对象了。
通过反射机制访问构造方法的目的是利用有参构造方法创建对象。
四 Method
- getName:获取方法名.
- getReturnType:返回值类型。
- getParameterTypes:获取形参类型。
- getModifiers:获取可以解析出修饰符的整数。
- invoke(obj,args...):使用参数args执行obj对象中的该方法,具体方法必须依附于对象。
通过反射机制访问对象中方法的目的是执行方法。
五 Field
- getName:获取成员变量的名称。
- getType:获取成员变量的类型。
- get(obj):获取指定对象obj中该成员变量的值。
- setObject(obj,args):为指定对象obj中的该变量赋值为args。具体参数必须依附于对象。
- setAccessible(true):将变量从private类型转化为public类型。
通过反射机制访问成员变量的目的是为获取指定对象中成员变量的值,或者为成员变量赋值,即取值与赋值两个目的。