一個父類定義了static靜態代碼塊,且有一個靜態變量value;子類實現(implements)父類,子類中也有靜態代碼塊,那麼直接調用子類.value輸出內容是什麼呢?
且看代碼:
package com.example.classloading;
public class SuperClass {
static {
System.out.println("SuperClass init!!!");
}
public static int value = 123;
}
package com.example.classloading;
public class ChildClass extends SuperClass {
static {
System.out.println("ChildClass init !!!");
}
}
package com.example.classloading;
/**
* 對於靜態字段,只有直接定義這個字段的類纔會被初始化
* @author yanup
*
*/
public class Test {
public static void main(String[] args) {
System.out.println(ChildClass.value);
}
}
大家能猜到最終打印的是什麼麼?
SuperClass init!!!
123
驚不驚喜,意不意外,不錯,只打印了父類中的靜態代碼塊和value值;
總結如下:對於靜態字段,只有直接定義這個字段的類纔會被初始化!!!!切記切記切記,重要的事情說三遍!!!