Java之物件建構過程,java物件建構

來源:互聯網
上載者:User

Java之物件建構過程,java物件建構


Java中一個對象的構造過程如下:


1-6屬於初始化靜態部分,如果一個類的靜態部分已經初始化了(已經被類載入器載入了),就不會再重複初始化靜態部分,靜態部分的初始化只會在類載入器載入一個類的時候初始化一次。


1.用類載入器載入父類,按父類靜態變數定義的順序的為父類所有靜態變數分配空間,並賦予父類靜態變數預設值。

2.用類載入器載入自己,按自己靜態變數定義的順序的為自己所有靜態變數分配空間,並賦予自己靜態變數預設值。


3.按父類靜態變數定義的順序的為父類所有靜態變數賦上定義的值。

4.執行父類靜態代碼塊。


5.按自己靜態變數定義的順序的為自己所有靜態變數賦上定義的值。

6.執行自己靜態代碼塊。


7-14屬於初始化執行個體部分。


7.為父類執行個體變數分配空間,並賦予預設值。

8.為自己執行個體變數分配空間,並賦予預設值。


9.按父類執行個體變數定義的順序的為父類所有執行個體變數賦上定義的值。

10.執行父類的構造代碼塊。

11.執行父類的構造方法。


12.按自己執行個體變數定義的順序的為自己所有執行個體變數賦上定義的值。

13.執行自己的構造代碼塊。

14.執行自己的構造方法。


物件建構完成!


注意:

1.父類如果還有父類就也依照此順序先初始化父類的父類,直到Object為止。


2.如果執行步驟3、5、9、12時,定義的值引入了別的類,則會初始化那個類,如果引用的類還有引用的類則也按照此順序先初始化引用類的引用類,直到所有被引用的類全部被初始化完畢為止。


3.如果一個類沒有父類(如Object類),則它的初始化順序可以簡化成2、5、6、8、12、13、14。


4.如果這個類已經被類載入器載入過了,也就是該類的靜態部分已經初始化過了,那麼1、2、3、4、5、6都不會執行,總的順序可以簡化為7、8、9、10、11、12、13、14。


5.如果這個類沒有被類載入器載入,但它的父類已經被類載入器載入過了,那麼總的順序可以簡化為2、5、6、7、8、9、10、11、12、13、14。


轉載請標明原地址,請尊重原創,謝謝。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.