1. 概念
反射是Java提供的一种在程序运行时分析类和对象的能力,允许程序在运行时动态获取类的信息(类名、属性、方法等),并动态操作类的对象,包括但不限于获取类信息、实例化对象、调用方法、获取构造器方法等。
2. 反射API
- Class类:反射核心类,可以获取类的属性、方法等
- Field类:Java.lang.reflec包中的类,表示类的成员变量,可以获取和设置类的属性值
- Method类:Java.lang.reflec包中的类,表示类的方法,可以获取类的方法信息或调用方法
- Constructor类:Java.lang.reflec包中的类,表示类的构造方法,可以用于实例化对象
3. 使用方法
获取类的Class对象,通过Class对象访问属性、方法、构造方法
3.1 获取Class对象的3种方法
// 1.使用Class类的forName静态方法
Class clazz = Class.forName("com.flash7k.Person");
// 2.使用对象的getClass方法
Person person = new Person();
Class clazz = person.getClass();
// 3.使用类的class属性
Class clazz = Person.class;
3.2 创建对象的2种方法
// 获取Class对象
Class clazz = Class.forName("com.flash7k.Person");
// 使用newInstane方法创建对象
Person person1 = (Person) clazz.newInstance();
// 使用构造方法创建对象
Constructor constructor = clazz.getDeclaredConstructor(String.class, int.class);
Person person2 = constructor.newInstance("李四",18);