習題 類初始化與實例初始化

               最後運行的結果是什麼?

class Father {
	private int i = test();
	private static int j = method();

	static {
		System.out.println("(1)");
	}

	Father() {
		System.out.println("(2)");
	}

	{
		System.out.println("(3)");
	}

	public int test() {
		System.out.println("(4)");
		return 1;
	}

	public static int method() {
		System.out.println("(5)");
		return 1;
	}
}
class TestInitialization extends Father {
	private int i = test();
	private static int j = method();
	static {
		System.out.println("(6)");
	}

	TestInitialization() {
		System.out.println("(7)");
	}

	{
		System.out.println("(8)");
	}

	public int test() {
		System.out.println("(9)");
		return 1;
	}

	public static int method(){
		System.out.println("(10)");
		return 1;
	}

	public static void main(String[] args) {
		TestInitialization t1 = new TestInitialization();
		System.out.println();
		TestInitialization t2 = new TestInitialization();
	}
}

               答案:

               (5)(1)(10)(6)(9)(3)(2)(9)(8)(7)

               (9)(3)(2)(9)(8)(7)

 

               注意:

               一個子類要初始化需要先初始化父類;

               一個類的初始化就是執行<clinit>()方法;<clinit>()方法由 靜態變量顯示賦值代碼和靜態代碼塊組成;<clinit>()只執行一次。

               this在構造器(或<init>)它表示的是正在創建的對象,因爲這裏是在創建子類對象,所以test()執行的是子類重寫的代碼,所以第五個數字不是(4)而是(9)

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章