类主动使用的5种情况

122 阅读1分钟

在JVM中,一个类从被加载到卸载需要经过如下阶段:

  1. 加载
  2. 验证、准备、解析
  3. 初始化
  4. 使用
  5. 卸载

其中,上面第2点的三个阶段统称为连接阶段。

那么类是在什么时候初始化的呢?

Java虚拟机规范是这样规定的:所有的虚拟机实现必须在类首次主动使用时才初始化它们。

于是问题又来了,哪种行为才是主动使用呢? 这样就来到了我们的正题:类主动使用的5种情况。这里提一句,除了这5种情况,其他的全部都是被动使用。

类主动使用的5种情况如下:

  1. 遇到new、getstatic、putstatic、invokestatic 这几个字节码指令,类没有初始化就会被初始化。对应的java场景为:我们使用new关键字创建对象、设置和读取类的静态属性、调用类的静态方法。
  2. 使用java.lang.reflect包的方法对类进行反射调用
  3. 当程序启动时,用户指定执行的主类
  4. 当一个类被初始化时,若其父类没有初始化,那么父类就会被初始化
  5. JDK1.7的动态语言支持(不常用)