Java類載入過程後,成員變數的初始化。
阿新 • • 發佈:2018-12-26
Java類的載入和成員變數初始化,建立物件的順序。
class X {
Y b=new Y();
X() {
System.out.println("X");
}
}
class Y {
Y() {
System.out.println("Y");
}
}
public class Z extends X {
Y y=new Y();
Z() {
super();
System.out.println("Z");
}
public static void main(String[] args) {
new Z();
}
}
//YXYTest
以上程式碼輸出結果為YXYZ
看以看出,public類載入後並沒有初始化成員變數y。在main方法使用new Z()建立物件時,先去構建class X父類物件,此時父類X的成員變數初始化輸出Y,然後構造方法輸出X,以後再進行class Z中y成員變數初始化輸出Y,緊接著Z()中的輸出語句輸出Z。
網上找來的,可能是最好的解釋了。
-------------------------------------------------------------------------------------------------------
在類被繼承的情況下,初始化的順序:
1.初始化子類,類載入器在載入它的時候會發現它繼承了另外一個類,類載入器要先把父類載入進來。於是開始載入父類,父類的靜態部分被按順序載入。之後子類的靜態部分被載入。這樣的順序是考慮子類的靜態域可能會依賴父類的靜態域;
2.父類的非靜態部分被載入;
3.子類指定的父類的構造器;
4.子類的非靜態部分被載入;
5.子類構造器的其餘部分。
------------------------------------------------------------------------------------------------