反射是Java框架的灵魂,在java 基础学习中非常重要。
什么是反射?
反射指的是它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。
如何获取Class类对象?
有三种方式获取Class类对象
- 对象名称.getClass()
//1. 对象.getClass(),多用于对象的获取字节码的方式
Person p = new Person();
Class cls3 = p.getClass();
System.out.println(cls3);//class top.lukeewin.demo19domain.Person
- 直接调用静态属性class
//2. 类名.class,多用于参数的传递
Class cls2 = Person.class;
System.out.println(cls2);//class top.lukeewin.demo19domain.Person
- 调用forName(“类的全路径”)
//3. Class.forName("类的路径"),多用于配置文件
Class cls1 = Class.forName("top.lukeewin.demo19Reflect.Person");
System.out.println(cls1);//class top.lukeewin.demo19domain.Person
反射中的作用
获取成员变量们
- Field field = cls.getField(String name)
- Field[] fields = cls.getFields()
- Field declaredField = cls.getDeclaredField(String name)
- Field[] declaredFields = cls.getDeclaredFields()
获取构造方法们
- Constructor<?>[] getConstructors()
- Constructor
getConstructor(类<?>… parameterTypes) - Constructor
getDeclaredConstructor(类<?>… parameterTypes) - Constructor<?>[] getDeclaredConstructors()
获取成员方法们
- Method[] getMethods()
- Method getMethod(String name, 类<?>…parameterTypes)
- Method[] getDeclaredMethods()
- Method getDeclaredMethod(String name, 类<?>…parameterTypes)
获取类名
- String getName()
Field
- 设置值
void set(Object obj, Object value)
- 获取值
get(Object obj)
- 忽略访问控制权限
setAccessible(true)
Constructor
- 创建对象
newInstance(Object...initarges)
如果创建的是空对象,可以直接使用Class类中的newInstance()方法
Method
- 执行方法
Object invoke(Object obj, Object...args)
获取类名
String getName()
Q.E.D.