我對Java中數據初始化有點困惑。我已經讀過,在Class中調用任何方法之前,所有的類字段都將被初始化。關於Java中數據初始化的混淆
考慮這個問題:
public class TestCls {
public static int test = getInt();
static{
System.out.println("Static initializer: " + test);
}
public static int getInt(){
System.out.println("giveInt func: " + test);
return 10;
}
public static void main(String... args){
System.out.println("Main: " + test);
}
輸出:
giveInt func: 0
static initializer: 10
main: 10
這裏 '測試' 領域獲得通過調用駐留在同一類getInt()函數的值。但是,當getInt()被稱爲'test'時,字段將被初始化爲默認值,即0(見getInt()函數內部)。我的問題是什麼時候getInt()函數會被調用?它是在定義'測試'字段時被調用,還是在初始化類中的所有字段後被調用。
你讀的是一個簡化。查看JLS [類實例創建表達式的運行時評估](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.4)故事。 –