介绍
Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。
反射
Class 类
类是对象,类是 java.lang.Class 类的实例对象,这个对象也称为类的类型。
实例对象的类类型的三种表达方式:
类名.class实例对象.getClass()Class.forName("类的全称")// 类的全称:包名 + 类名
Code
- Target.java
1 |
|
- ReflectDemo.java
1 | public class ReflectDemo { |
动态加载类
- 1.静态加载类:编译时刻加载类
- 2.动态加载类:运行时刻加载类
new 创建对象,是静态加载类。
通过反射获取类的信息
- 获取构造函数
java.lang.reflect.Constructor<T> - 获取方法
java.lang.reflect.Method - 获取成员变量
java.lang.reflect.Field
Code
- ReflectUtil.java
1 | import java.lang.reflect.Constructor; |
- 测试方法 Main.java
1 | public class Main { |
方法反射
方法的名称和方法的参数列表才能唯一决定某个方法。Method method = c.getDeclaredMethod("方法名",可变参数列表(参数类型.class))method.invoke(对象,参数列表)
Code
- ReflectDemo2.java
1 | import java.lang.reflect.InvocationTargetException; |
集合的泛型
集合在编译期会检查泛型,而编译后的集合是去泛型化的。因此,可以通过反射,绕过编辑器的泛型检查,从而了解集合的泛型本质。
Code
- ReflectDemo3.java
1 | import java.lang.reflect.InvocationTargetException; |