java成員變量初始化順序

一道代碼執行順序題

package test;
//代碼運行結果:finalValue_1
public class Child  extends Base{
	String str="finalValue_1";
	public void preProcess() {
		//System.out.println("賦值");
		str="Child.preProcess";
	}
	public Child() {}
	public static void main(String[] args) {
		Child c=new Child();
		System.out.println(c.str);
	}
}


class Base {
	public Base() {
		this.preProcess();
	}

	public void preProcess() {
		System.out.println("父類preProcess()");
	}
}
//以上代碼執行順序:
/*
 1.main:  Child c=new Child();創建對象的時候調用構造方法
 2.進入構造方法,成員變量str分配內存空間並初始化爲null
 3.在構造中默認用super()調用父類無參構造
 4.父類無參構造中調用this.preProcess(); 因爲preProcess()方法進行了重寫這裏用子類對象調用preProcess()
      所以調用子類的preProcess方法(父類的preProcess方法沒有執行也沒有輸出),子類preProcess方法將str的值變爲"Child.preProcess"
 5.父類無參構造執行結束回到子類無參構造,子類無參構造執行完畢後
 6.對成員變量str再次賦值爲"finalValue_1"(故最終str的值爲"finalValue_1")
*/

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