反射的概念
* 反射是一种机制,利用该机制可以在程序的运行过程中对类进行解剖并操作类中的所有成员:
构造方法,成员变量,成员方法等。
反射的使用场景
* 开发IDE(集成开发环境,比如Eclipse,IDEA...)
* 各种框架的设计,比如Hibernate,Spring,Struct 简称:SSH
反射机制的使用前提
* 必须要获得类的字节码文件对象,即是Class对象
获得Class对象的三种方式
* 方式1:通过对象名调用getClass方法获得
* 方式2:直接通过类名.class获得
* 方法3:通过Class类的静态方法获得:static Class forName("类全名字符串");
以上三种方式获得的Class对象都是相同的。
Class类常用方法
String getSimpleName(); 获得类名字符串
String getName(); 获得类全名字符串
T newInstance() ; 创建对象,类必须有public修饰的无参数构造方法。
构造方法概述
* 每一个类中的构造方法都是一个Constructor类的对象。
* 获得构造方法对象的目的就是要利用构造方法对象创建对象。
Class类中与Method相关的方法
1. Constructor getConstructor(Class... parameterTypes)
* 根据指定参数类型获得对应的构造方法对象,只能获得public修饰的方法
2. Constructor getDeclaredConstructor(Class... parameterTypes)
* 根据指定参数类型获得对应的构造方法对象,包括private修饰
3. Constructor[] getConstructors()
* 获得所有的构造方法对象,只能获得public修饰的
4. Constructor[] getDeclaredConstructors()
* 获得所有的构造方法对象,包括private修饰的
Constructor类成员方法
* T newInstance(Object... initargs)
* 根据指定参数来创建对象
* void setAccessible(true)
* 设置是否取消权限检查,true表示取消,false表示不取消。
* 暴力反射
成员方法概述
* 每一个类中的成员方法都是一个Method类的对象。
* 获得Method对象的目的就是要调用该方法
Class类中与Method相关的方法
* Method getMethod(String methodName, Class...args)
* 根据方法名和参数类型获得对应的Method对象,只能获得public修饰的
* Method getDeclaredMethod(String methodName, Class...args)
* 根据方法名和参数类型获得对应的Method对象,包括private修饰的
* Method[] getMethods()
* 获得类中的所有的成员方法对象,只能获得public的,包括父类的
* Method[] getDeclaredMethods()
* 获得类中的所有的成员方法对象,只能获得本类的,包括private
Method类成员方法
* Object invoke(Object obj, Object... args)
* 调用obj对象的该方法,args:调用方法传递的参数
* 返回值是Object
2. void setAccessible(boolean flag)
* 设置是否取消权限检查,true表示取消,false表示不取消。
* 暴力反射