反射
java 反射机制就是在程序运行状态中,对于任意一个类,都能够知道这个类的属性和方法。对于任意一个对象,都能够调用到他们的属性和方法。这种动态获取信息以及动态调用对象的方法的功能成为 java 语言的反射机制。
实现方式
- Class 类的使用;
- 方法的反射;
- 成员变量的反射;
- 构造函数的反射;
- Java 类加载机制;
Class 类
- 万事万物皆为对象
类是对象,类是 java.lang.Class的实例对象,这个对象称为该类的类类型。 - 如何创建一个类,同时实例化一个对象,如下:
如何标识 Person 这个类的实例对象以及 Class 类的实例对象:Person person = new Person();
注意 Class 类的构造方法是私有的:/* * Private constructor. Only the Java Virtual Machine creates Class objects. * This constructor is not used and prevents the default constructor being * generated. */ private Class(ClassLoader loader) { // Initialize final field for classLoader. The initialization value of non-null // prevents future JIT optimizations from assuming this final field is null. classLoader = loader; }
三种表现形式
通过对象实例方法获取对象
// 第一种 personClass为 Person 的类类型
Class<Person> personClass = Person.class;
通过 Object 类的 getClass()方法
// 第二种
Class<? extends Person> personClass2 = person.getClass();
通过 Class 类里面的 forName()方法
注意:
在开发中一般使用第三种方法,因为第三种接收的是一个字符串路径,将来可以通过配置文件获取,通用性好;
try {
// 第三种
Class<?> personClass3 = Class.forName("com.easou.noveltouch.business.agreement.Person");
// 一个类只有一个 Class 的实例对象
System.out.println(personClass==personClass2);
System.out.println(personClass==personClass3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}