反射是框架技术的灵魂,是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。 对于任意一个对象,都能够调用它的任意属性和方法 。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
我们学习反射可以通过类的字节码对象去给类的成员变量对象赋值与获取、使用成员方法、通过构造方法创建对象。
我们可以通过以下方法去获取字节码对象。Class.forName("全类名"); 类名.class; 对象.getClass()。
反射类中的构造方法:
Constructor<T> getConstructor(Class<?>... parameterTypes)返回单个公共构造方法对象。
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)返回单个构造方法对象。
Constructor类用于创建对象的方法:
T newInstance(Object...initargs) 根据指定的构造方法创建对象。
setAccessible(boolean flag) 设置为true,表示取消访问检查。
Field getField(String name) 返回单个公共成员变量对象。
Field getDeclaredField(String name) 返回单个成员变量对象。
void set(Object obj, Object value) 赋值。
Object get(Object obj) 获取值。
大家最好不要暴力反射。
Method getMethod(String name, Class<?>... parameterTypes) 返回单个公共成员方法对象。
Method getDeclaredMethod (String name, Class<?>... parameterTypes) 返回单个成员方法对象。
Object invoke(Object obj, Object... args) 运行方法。