1. 程式人生 > >子類引用父類的靜態欄位,不會導致子類初始化

子類引用父類的靜態欄位,不會導致子類初始化

先看程式碼

// 父類
public class SuperClass {
    static {
        System.out.println("SuperClass Init!");
    }
    public static int value = 123;
}

//子類
public class SubClass extends SuperClass{
    static {
        System.out.println("SubClass init!");
    }
}

測試

public class NotInitialization {
    public static void main(String[] args){
        // 對於靜態欄位,只有直接定義了這個欄位的類才會被初始化
        System.out.println(SubClass.value);
    }
}

輸出

SuperClass Init! 123

從輸出結果中可以得出通過子類來引用父類中定義的靜態欄位,只會觸發父類的初始化而不會觸發子類的初始化。 但是觸發了子類的載入。通過-XX:+TraceClassLoading引數可以觀察。結果如下圖: 在這裡插入圖片描述