Java反射机制:运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。
JDK中,实现反射机制的类在java.lang.reflect包中。
1. Class 类:代表一个类
它有以下方法
(1) getName():获得类的完整名字。
(2) getFields():获得类的public类型的属性。
(3) getDeclaredFields(): 获得类的所有属性,包括public、protected、默认和private访问级别的属性。
(4) getMethods():获得类的public类型的方法。
(5) getDeclaredMethods():获得类的所有方法。
(6) getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。
(7) getConstrutors():获得类的public类型的构造方法。
(8) getConstrutor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。
(9) newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
2. Field 类:代表类的成员变量(类的属性)。
3. Method类:代表类的方法。Method类的invoke(Object obj,Object args[])方法用于动态执行一个对象的特定方法,它的第一个 obj 参数指定具有该方法的对象,第二个args 参数指定向该方法传递的参数。
4. Constructor类:代表类的构造方法。
5. Array 类:提供了动态创建数组,以及访问数组元素的静态方法。