今天又複習了一下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