例項的初始化過程 new 物件

2022-08-15 09:03:22 字數 1006 閱讀 3600

類的載入過程:

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)

物件初始化過程

class person 靜態 塊 static 構造 塊 public void setname string name public void speak public static void showcountry class newperson 當程式執行到person p new pers...

物件初始化過程

1.這是個筆記.helloparent.class public class helloparent public helloparent hellochild.class public class hellochild extends helloparent public hellochild p...

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...