實例的初始化過程: new 對象


類的加載過程:
1.JVM會先去方法區中找有沒有相對應類的.class存在。如果有就直接使用,如果沒有,則把相關類的.class 加載到方法區
2.在.class加載到方法區時,會分為兩部分加載:先加載非靜態內容,再加載靜態內容
3.加載非靜態內容:把.class中的所有非靜態內容加載到方法區下的非靜態區域內
4.加載靜態內容:
   4.1: 把.class的所有靜態內容加載到方法區下的靜態區域內
   4.2: 靜態內容加載完成后,對所有的靜態變量進行默認初始化
   4.3:  靜態變量默認初始化完成之后,對其進行顯示初始化
   4.4: 當靜態區域下的所有靜態變量顯示初始化完成之后,執行靜態代碼塊
5.  當靜態區域的靜態代碼塊執行完之后,整個類就加載完了
6.  如果存在繼承關系,那么父類先加載,再加載子類

在加載靜態的過程中,先要加載靜態的成員變量,然后再加載靜態代碼塊,之后再加載靜態的成員方法。

 

實例的初始化過程: new 對象
1. 在堆中開辟一塊空間 這塊空間會分割成兩份 一份是super 一份是this
2. 給開辟的空間分配一個地址
3. 把對象的所有非靜態成員加載到所開辟的空間中
4. 所有的非靜態成員加載完畢后,對所有的非靜態成員變量進行默認初始化
5. 所有的非靜態成員變量默認初始化之后,調用構造函數
6 構造方法進入棧內存執行,分為兩部分:先執行構造方法的隱式三步,再執行構造方法中書寫的代碼
隱式三步:
1. 執行super()語句 所有的類都是object的子類,每個方法中都有默認的super() 如果定義了有參構造,那么原來的就會被覆蓋掉
2. 對開辟空間下的所有非靜態成員變量進行賦值(顯示初始化)
3. 執行構造代碼塊 { }
7. 隱式三步執行后,執行構造函數中的代碼
8.再整個構造函數執行完並彈棧后,把空間分配的地址賦值給一個引用對象(最后才把地址值賦值給棧中使用)
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





附件列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM