反射是发生在程序运行期的行为;
Java 反射机制 可以实现的功能:
① 在运行时判断任意一个对象所属的类;
② 在运行时构造任意一个类的对象;
③ 在运行时判断任意一个类所具有的成员变量和方法;
④ 在运行时调用任意一个对象的方法;
⑤ 生产动态代理.
在创建类型的对象的时候,获取的是类型的Class对象的一个镜像|复制体
能够拿到一个类型的class对象,就可以操作.
获取一个类型的class对象的方式:
1 类名.class;
2 对象.getClass();
3 Class.forName(包名+类名).
class 中常用的方法:
通过反射获取字段
Field getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field[] getFields()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
操作字段
设置值 void set(Object obj, Object value)将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
获取值 Object get(Object obj)返回指定对象上此 Field 表示的字段的值。
通过反射获取方法:
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method getMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[] getMethods()
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
通过反射执行方法:
Object invoke(Object obj, Object... args) 返回值:调用执行的方法的返回值
obj调用当前成员方法的对象
可变参数args 方法的实参
通过反射获取方法:
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods()
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method getMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[] getMethods()
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
通过反射执行方法:
Object invoke(Object obj, Object... args) 返回值:调用执行的方法的返回值
obj调用当前成员方法的对象
可变参数args 方法的实参