Java 類內字段的初始化過程

2021-06-17 23:13:10 字數 1254 閱讀 2114

4 . 4  成員初始化;6 . 9 初始化和類裝載

構建器的呼叫遵照下面的順序:

(1) 呼叫基礎類構建器。這個步驟會不斷重複下去,首先得到構建的是分級結構的根部,然後是下乙個衍生

類,等等。直到抵達最深一層的衍生類。

(2) 按宣告順序呼叫成員初始化模組。

(3) 呼叫衍生構建器的主體。

0. 先初始化父類字段

1. 先靜態字段,再例項字段

2. 當類載入虛擬機器時(第一次呼叫靜態字段,或靜態方法,或例項化乙個物件),初始化靜態字段

3. 當建立乙個類的例項時,初始化例項字段

4. 靜態或例項 欄位間的初始化順序與在類的定義時,欄位所處的行號順序一致

5. 靜態字段初始化過程:

1)類載入虛擬機器時,分配靜態欄位所需記憶體,並清空記憶體,實際上就是置0:簡單資料型別均為0值,布林型為false,引用型別為null

2)執行字段定義時的賦值操作

3)執行靜態初始化塊的賦值操作

6. 例項字段初始化過程:

1)新建乙個物件時,分配物件所需記憶體,當然也包括例項欄位所需記憶體,並清空記憶體,實際上就是置0:簡單資料型別均為0值,布林型為false,引用型別為null

2)執行字段定義時的賦值操作

3)執行例項初始化塊的賦值操作

4)執行構造方法裡的賦值操作

7. 載入乙個類時,若檢測到它有父類,則先載入它的父類,如此遞推的找到繼承的根類,從根類往下執行載入

8. 方法內定義的區域性變數,與類成員字段不同,方法內的區域性變數定義時不會執行清空記憶體操作,所以必須進行賦值,初始化之後才能使用這些區域性變數

9. **示例

class ca

int i;

ca(int i)

class test

static int snum1;

static int snum2 = 2;//定義時的賦值操作

static ca sca1;

static ca sca2 = new ca(2);

static

int num3;

int num4 = 4;//定義時的賦值操作

ca ca3 = null;

ca ca4 = new ca(4);

test()

snum2 初始化過程中值的變化為:0(清空記憶體)、2(定義時賦值)、22(靜態初始化塊內賦值)

num4 初始化過程中值的變化為:0(清空記憶體)、4(定義時賦值)、44(例項初始化塊內賦值)、444()構造方法內賦值

java類初始化過程

測試3個內容 類載入順序 子父類執行過程 物件初始化過程 從幾次試驗我們看到 當執行到類時,類被載入到記憶體,並初始化 靜態成員被載入到共享區 不用例項化物件就可以呼叫靜態資源 靜態成員變數,靜態成員方法,靜態 塊,只初始化一次 而普通變數,普通 塊,構造方法,在每次例項化物件時都要初始化 子類物件...

JAVA類初始化過程

輸入結果為 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 方法由靜態類變數顯示賦值 和靜態 塊組成 類變數顯示賦值 和靜態 塊 從上到下順序執行 方法只執行一次 a,例項初始化就是執行 方法 方法可能過載...

Java類的初始化過程

1.首先,初始化父類中的靜態成員變數和靜態 塊 jvm載入類時執行,僅執行一次 按照在程式中出現的順序初始化 2.然後,初始化子類中的靜態成員變數和靜態 塊 jvm載入類時執行,僅執行一次 按照在程式中出現的順序初始化 3.其次,初始化父類中的普通成員變數和 塊 每一次建立物件時建立 再執行父類的構...