一、什么是反射
在计算机领域,反射指一种能力,能够自描述和自控制,即在运行状态中,动态获取类信息及动态调用实例方法的能力
- Java反射有以下3个特性
- 运行时创建实例
- 运行期间调用方法
- 运行时更改属性
二、Java反射常用的API
java.lang.Class<T>类:反射的核心类,反射所以得操作都围绕该类来生成的。通过Class类可以获得类的属性、方法等内容信息
java.lang.reflect.Constructor<T>类:表示类的构造方法
java.lang.reflect.FieId类:表示类的属性,可以获取和设置类中属性的值
java.lang.reflect.Method类:表示类的方法,可以用来获取类中方法的信息或执行方法
获取对应类型基本信息的方法
方法 | 说明 |
---|---|
String getName() | 以字符串形式返回该类型的名称 |
String getSimpleName() | 以字符串形式返回该类型的简称(类名) |
Package getPackage() | 获取该类型所在的包 |
Class getSuperclass() | 获取该类型的超类的Class实例 |
Class[] getInterfaces() | 返回该类型所实例的全部接口的Class实例 |
int getModifiers() | 返回该类型的所有修饰符 |
Class[] getDeclaredClasses() | 返回该类型中包含的全部内部类的Class实例 |
Class getDeclaringClass() | 返回该类型所在的外部类的Class实例 |
获取对应类型所包含构造方法的方法
方法 | 说明 |
---|---|
Constructor getConstructor(Class... params) | 返回该类型指定参数列表的public构造方法 |
Constructor[] getConstructors() | 返回该类型的所有public构造方法 |
Constructor getDeclaredConstructor(Class... params) | 返回该类型指定参数列表的构造方法,访问级别不限 |
Constructor[] getDeclaredConstructors() | 返回该类型的所有构造方法,访问级别不限 |
Constructor getDeclaredConstructor() | 获取该类型的无参构造函数 |
获取对应类型所包含属性的方法
方法 | 说明 |
---|---|
FieId getFieId(String name) | 返回该类型中指定名称的public属性 |
FieId[] getFieIds(String name) | 返回该类型中所有public属性 |
FieId getDeclaredFieId(String name) | 返回该类型中指定名称的属性,与属性的访问级别无关 |
FieId[] getDeclaredFieIds() | 返回该类型中的全部属性,与属性的访问级别无关 |
获取对应类型所包含方法的方法
方法 | 说明 |
---|---|
Method getMethod(String name,Class... params) | 返回该实例中指定的public方法 |
Method[] getMethods() | 返回该实例中所有public方法 |
Method getDeclaredMethod(String name,Class... params) | 返回该实例中指定的方法,与方法的访问级别无关 |
Method[] getDeclaredMethods() | 返回该实例中的全部方法,与方法的访问级别无关 |
- Java反射机制是指在运行状态中,动态获取类型信息及动态访问实例成员的能力。
- 使用反射可以在程序运行时创建类的实例及访问其属性和方法。
- 反射在Java框架技术中有着大量的应用