最近在学习java虚拟机方面的东西,看的是周志明的《深入理解java虚拟机》,看到类的加载尤其是类的加载时机这一块觉得受益匪浅,遂记录一下。

必须初始化的四种情况

有四种情况类是必须要进行初始化的,对于这四种情况原文描述如下:

以上四点我们一一用代码来验证,第一点里面说到了四种初始化的场景,分别是:

①用new关键字实例化对象

②读取类静态字段

③设置类的静态字段

④调用一个类的静态方法

在验证之前需要达成一个共识:虚拟机在初始化类时会执行static语句块中的操作,因此我们可以根据静态语句块中的代码是否执行了来判断类是否加载。为此我创建了一个SubClass类

package com.test.jvm.classloading;

/**
 * @author fc
 */
public class SubClass {
    static{
        System.out.println("子类初始化");
    }
    public static int a = 10;

    public static int getA(){
        return a;
    }
}
12-12 18:09