關於Java中初始化順序的問題

 在遇到關於Java考試內容的時候總會避免不了一些初始化順序的問題,究竟是誰先被初始化,在Think in Java 中作者是這樣闡述的,希望對迷茫的人有幫助。

 

初始化的順序是首先static(如果它們尚未由前一次對象創建過程初始化),接着是非static 對象。大家
可從輸出結果中找到相應的證據。
在這裏有必要總結一下對象的創建過程。請考慮一個名爲Dog 的類:
(1) 類型爲Dog 的一個對象首次創建時,或者Dog 類的static 方法/static 字段首次訪問時,Java 解釋器
必須找到Dog.class(在事先設好的類路徑裏搜索)。
(2) 找到Dog.class 後(它會創建一個Class 對象,這將在後面學到),它的所有static 初始化模塊都會運
行。因此,static 初始化僅發生一次——在Class 對象首次載入的時候。
(3) 創建一個new Dog()時,Dog 對象的構建進程首先會在內存堆(Heap)裏爲一個Dog 對象分配足夠多的存
儲空間。
(4) 這種存儲空間會清爲零,將Dog 中的所有基本類型設爲它們的默認值(零用於數字,以及boolean 和
char 的等價設定)。
(5) 進行字段定義時發生的所有初始化都會執行。
(6) 執行構建器。正如第6 章將要講到的那樣,這實際可能要求進行相當多的操作,特別是在涉及繼承的時
候。

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