Java類初始化順序

今天又複習了一下Java類初始化的順序,記錄一下。
主要是觀察類裏面成員變量,靜態變量,靜態代碼塊,構造器的初始化順序。寫了一個測試類Mobile ,在裏面加入相應的輸出,觀察輸出順序,理解Java類初始化。
測試類Mobile以下:css

public class Mobile {
	int  id;
	static {
		System.out.println("--static-----");
	}
	String str=str();
	static String staticString=staticString();
	public Mobile() {
		super();
		System.out.println("-Mobile()---super()------after------");
	}

	public String str(){
		System.out.println("-str()-----");
		return "str";
	}
	public static String staticString(){
		System.out.println("--staticString()-----");
		return "staticString";
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
}

輸出結果:測試

--static-----
--staticssss()-----
--s()-----
-Mobile()---super()------after------

能夠看到,優先級:靜態變量和靜態代碼塊>成員變量>構造器,若是優先級相同,則按順序執行。
不管建立多少對象,靜態數據都只佔用一份存儲區域。
若是有父類子類的話,優先執行父類的,再執行子類的。例如:父類的靜態變量和靜態代碼塊>子類的靜態變量和靜態代碼塊>父類的成員變量>父類的構造器>子類的成員變量>子類的構造器this

相關文章
相關標籤/搜索