0%

反射

简单来说,Java 反射机制就是 Java 运行时通过创建一个类的反射对象,再对类进行相关操作:

  • 获取对象的成员变量、赋值
  • 调用该对象的方法(构造方法、有参/无参)
  • 判断该对象所属类

反射的原理

Java 编译后生成 .class 文件,JVM 启动时会载入所有的 .class 文件,并将Class 信息存储在方法区中。

对象都分配在 Java 堆上,但是对象头还是会保存类型指针指向方法区的这个类信息。

所以,与正射不同,反射我们首先在方法区获得这个类型信息,这样就能知道这个类的父类、构造器、属性、方法、注解等信息,我们就能利用这些类型信息完成对实例的操作。这就是使用一个类的逆向过程。

操作比较

三种获取 Class 的方式及区别:

  • MyClass.class : 被 ClassLoader 加载到内存中,不会做任何类的初始化工作
  • Class.forName: 被 ClassLoader 加载到内存中,会进行类的静态初始化工作
  • new MyClass().getClass: 被 ClassLoader 加载到内存中,静态初始化和非静态初始化工作都会进行

以上内容参考自CSDN上的博客1CSDN上的博客2

谢谢你的鼓励