Java基礎--成員變量初始化順序

public class Test {
	public static void main(String[] args) {
		B b = new B();
		b.f();
	}
}

class A{
	A(int i){
		System.out.println("A("+i+")");
	}
}
class B {
	B(){
		System.out.println("show B");
		a3 = new A(33); //覆蓋後面賦值的句柄
	}
	void f() {
		System.out.println("init f");
	}
	static {
		System.out.println("show static");
	}
	A a1 = new A(1);
	A a2 = new A(2);
	A a3 = new A(3);
}

執行順序結果:
show static
A(1)
A(2)
A(3)
show B
A(33)
init f
———————————————————————————————————————————————————————
官方解釋:
初始化的順序是由變量在類內的定義順序決定的。即使變量定義大量遍佈於方法定義的中間,
那些變量仍會在調用任何方法之前得到初始化——甚至在構建器調用之前,static,永遠是在類初始化之前執行,包括類的變量列表
通俗來說久
類的初始化後,1.先執行static代碼塊,2.在執行類(全部)變量,3.執行構造函數,4執行調用方法,5.初始化方法中變量(局部)

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