class b
private int a=1;
public void go()
}public class a1 extends b
private int a=11;
public void go()
public static void main(string args)
}
以上**輸出結果為:
ba=0
a1我當時以為是輸出a=11,結果回來跑了一把**後,發現為0,即:先執行a1這時只是申明變數,並沒賦值,然後執行b(),這時獲取到a是a1裡的,但還是初始值0呢,所以輸出0.
後來經資料官方的解釋為:對類變數的初始化是在執行完其構造方法的第一行**(即this或super)後才開始的。
以下**可以證實:
class b catch (interruptedexception e)
b.go();
}}.start();
} public void go()
}public class a1 extends b
private int a=11;
public void go()
public static void main(string args)
}
輸出結果為:
a=0aaa=11//這個是23行輸出的
a=11//這個是12行輸出的,由於另起了執行緒,所以在輸出的時候已經執行完了構造方法
類的靜態成員變數初始化時間
首先先搞明白 宣告 定義 初始化 類的靜態成員變數在類內宣告,可以多次宣告 類的靜態成員必須在類外定義,定義就是給變數分配記憶體,初始化就是給乙個變數賦初值,內建型別通常定義時預設初始化 類靜態成員變數在main函式執行前完成初始化,有靜態初始化和動態初始化 static initializatio...
類成員變數初始化
在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...
類的初始化時機
什麼情況下需要開始類載入過程的第乙個階段 載入 虛擬機器規範中並沒強行約束,這點可以交給虛擬機器的的具體實現自由把握,但是對於初始化階段虛擬機器規範是嚴格規定了如下幾種情況,如果類未初始化會對類進行初始化。建立類的例項 訪問類的靜態變數 除常量 被final修辭的靜態變數 原因 常量一種特殊的變數,...