Java中new一個對象執行什麼代碼

New一個類的的時候,

  1. 執行父類的static成員和static代碼塊(按照先後順序)
  2. 執行子類的static成員和static代碼塊(按照先後順序)
  3. 執行父類的非static成員字段變量和代碼塊的初始化(按照先後順序)
  4. 執行父類的構造方法
  5. 執行子類的非static成員字段變量和代碼塊的初始化(按照先後順序)
  6. 執行子類的構造方法

記憶方法:從父到子,靜態到非靜態
參考鏈接

package excise;

class A{
	static{
		System.out.print("a");
	}
	public A(){
		System.out.print("b");
	}
}

class B extends A{
	static{
		System.out.print("c");
	}
	public B(){
		System.out.print("d");
	}
}

public class excise {
	public static void main(String[] args) {
		A b = new B();
		b = new B();
	}
}

輸出結果:

acbdbd

解析:
易混淆

A b;		//定義一個類變量(引用),類型爲A,變量名b
b = new B()	//實例化B,並將它賦值給b

A b = new B();
b = new B();

new了兩次B(),其實第一次new的B還在,只不過找不到了,只能等待垃圾回收機制釋放,b指向第二次new的B

第一次new的時候,首次static塊會被加載到緩存中,第二次new的時候,不需要重複加載,直接用即可,所以static塊只加載一次

參考鏈接
參考鏈接
參考鏈接
參考鏈接

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