1. 程式人生 > >Java類載入過程後,成員變數的初始化。

Java類載入過程後,成員變數的初始化。

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.子類構造器的其餘部分。

------------------------------------------------------------------------------------------------