java中的反射

要理解反射,必须先了解一下java体系中的Class对象、类加载机制这两个概念。

Class对象

在java中,Class对象包含了与类有关的信息。类是程序的一部分,每个类都有一个Class对象。为了生成这个类的对象,JVM将使用“类加载器”的子系统将这个类的Class对象加载到内存。一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象

类加载机制

  1. 加载,由类加载器执行。从classpath路径中查找字节码(即.class文件),之后利用字节码创建一个Class对象
  2. 链接,验证字节码,为静态域分配存储空间,如果该类引用了其他类,将解析这个类创建的对其他类的所有引用
  3. 初始化,如果该类具有超类,则对其初始化,执行静态初始化器和静态初始化块。

初始化被延迟到了对静态方法(包括调用构造器,可以将构造器理解为隐式的静态方法)或者非常数静态域进行首次引用才执行

什么是java程序的反射?

利用反射可以分析类的能力

  • 运行时分析类的能力
  • 运行时查看类对象
  • 实现通用的数组操作代码
  • 调用任意方法