物件例項化過程

2022-07-10 16:09:13 字數 1502 閱讀 3216

1.首先分析一下記憶體空間

棧訪問速度比堆要快,僅次於直接位於cpu中的暫存器

2.物件例項化:

(1)首先,靜態**塊在載入時就執行了,所以肯定是最先執行的;

(2)對於非靜態**塊會在構造方法中的**塊之前載入

執行結果:

static成員在載入位元組碼檔案到記憶體過程是會被優先執行,靜態成員變數會在方法區優先初始化

(3)具體過程:

(4)若存在繼承關係:

繼承的過程:在jvm裝載類的準備階段,首先為類的所有類屬性和類初始化塊分配記憶體空間,並在類首次初始化階段中為其進行初始化,類屬性和類初始化塊之間的定義時的順序決定了其初始化的順序;若類存在父類,則首先初始化父類的類屬性和類初始化塊,一直上溯到object類最先執行。

所以載入順序為:

遵循規則

3.補充:

jvm 載入類進記憶體時,會先載入父類,然後載入子類

在初始化類時,先對類屬性進行預設初始化,然後呼叫其建構函式進行顯示初始化

而在建構函式中,會先呼叫父類建構函式進行初始化:

(1)先對父類屬性進行預設初始化,然後初始化父類建構函式;

(2)父類初始化完後,再初始化子類屬性,然後子類建構函式進行初始化;

(3)初始化完後把位址賦值給子類的引用變數;

public class person

public void show()

}

public class student extends person

public void show()

public static void main(string args)

}

執行結果:

這是person建構函式

這是student  show()函式

這是student建構函式

這是person  show()函式

這是student  show()函式

物件例項化過程分析

下面通過乙個簡單經典的demo演示下 class fu public void show class ziextends fu public void show public class test 執行結果 zi.run.0zi cons run1.8zi.run.8例項化步驟 1.jvm會讀取指定...

Java物件例項化過程

jvm會讀取指定路徑下的class檔案,並載入進記憶體,並會先載入其父類 如果有直接的父類的情況下 在堆記憶體中開闢空間,分配位址。並在物件空間中,對物件中的屬性進行預設初始化。呼叫對應的建構函式進行初始化。在建構函式中,第一行會先呼叫父類中的建構函式進行初始化。父類初始化完畢後,再對子類的屬性進行...

例項化物件的過程

在js中,物件的建立方式有許多種,new objec 字面量 建構函式等等,在es6中提供了採用class關鍵字來建立物件的方式,這些林林種種的寫法各有優劣,但是追根究底都是採用new object的方式來建立的。object是js的內建物件,也是所有物件的起源,那麼為什麼new乙個object得到...