我爱编程

JVM加载类的时机

2018-07-26  本文已影响16人  四喜汤圆
image.png

类的生命周期

加载,连接(验证,准备,解析),初始化,使用,卸载

image.png
摘自 深入理解java虚拟机【Java虚拟机类生命周期】

对类的主动引用(5种),会触发类的初始化

Java虚拟机规范中对于类加载的时机没有明确的规范,但是明确规定了有且只有5种情况下,必须立即对类进行初始化。(既然执行了初始化,加载、连接操作肯定在初始化之前已经开始(并不保证结束的顺序)

上述5种情况称为对类的主动引用,下面介绍几种对类的被动引用情况

对类的被动引用(列举3个),不会触发类的初始化

// 父类
public class SuperClass{
    public static int a=1;
}

// 子类
public class SubClass extends SuperClass{
    public static void main(String[] args){
        System.out.println(SubClass.a)
    }
}
public class Main{
    public static void main(String[] args){
        SuperClass[] arr=new SuperClass[10];
    }
}
public class ConstClass{
    public static final String HELLO_WORLD="hello";
}

public class Main{
    public static void main(String[] args){
        ConstClass.HELLO_WORLD;
    }
}

参考文献

JVM_周志明

上一篇下一篇

猜你喜欢

热点阅读