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.其次,初始化父類中的普通成員變數和 塊 每一次建立物件時建立 再執行父類的構...