反射相关知识
1.什么是反射
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
框架=反射 + 注解 + 设计模式
-
反射机制能提供的功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时获取泛型信息
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理
2.反射类的理解与获取Class实例
- Class类的理解
- 类的加载过程
程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。- 换句话说,Class的实例就对应着一个运行时类。
- 加载到内存中的运行时类,会缓冲一定的时间。在此时间之内,我们可以通过不同的方法来获取此运行时类
- 获取Class实例
类.class
对象.getClass()
Class.forName("全类名")
3。获取Constructor对象
和一个类中的构造方法有关系。构造方法类对象
Constructor<?>[]
getConstructors()
返回包含一个数组Constructor
对象反射由此表示Class的所有公共构造 方法对象。Constructor<?>[]
getDeclaredConstructors()
返回一个反映Constructor
对象表示的类声明的所有Constructor
对象的数组类
的构造方法 。Constructor<T>
getConstructor(Class<?>... parameterTypes)
返回一个Constructor
对象,该对象反映Constructor
对象表示的类Constructor<T>
getDeclaredConstructor(类<?>... parameterTypes)
返回一个Constructor
对象,该对象反映Constructor
对象表示的类或接口的指定 构造方法对象
以上的方法都是Class对象调用的
下面这个方法是Construct对象调用的
T
newInstance(Object... initargs)
使用此Constructor
对象表示的构造函数,使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。
4.获取Method对象
Method[] getMethods()获取当前类或者父类的公开的所有的方法 Method[]
getDeclaredMethods()
获取当前类所有的方法,但是不能获取父类的方案Method getMethod(String name, 类<?>... parameterTypes)
返回一个方法
对象,它反映此表示的类或接口的指定公共成Method getDeclaredMethod(String name, 类<?>... parameterTypes)
返回一个方法
对象,它反映此表示的类或接口的指定声明的方法类
对象。
学一个Method下面的方法
Object
invoke(Object obj, Object… args)在具有指定参数的 方法
对象上调用此方法
对象
5.获取Field对象
Field[] getFields()获取当前类公开的所有的属性 Field[]
getDeclaredFields()
获取当前类所有的属性Field getField(String name, 类<?>... parameterTypes)
返回一个属性
对象,它反映此表示的类或接口的指定公共成Field getDeclaredField(String name, 类<?>... parameterTypes)
返回一个属性
对象,它反映此表示的类或接口的指定声明的属性类
对象。
学一个Method下面的方法
Object
set(Object obj, Object… args)在具有指定参数的 方法
对象上调用此方法
对象