1? 無繼承情況下的Java初始化順序:
輸出結(jié)果為:
由此可以得出結(jié)論:
a靜態(tài)成員變量首先初始化(注意说订,Static可以看做一個(gè)靜態(tài)成員听诸,其執(zhí)行順序和其在類中申明的順序有關(guān))
b 普通成員初始化
c 執(zhí)行構(gòu)造函數(shù)坐求。
對(duì)于靜態(tài)成員(static塊可以看成普通的一個(gè)靜態(tài)成員,其并不一定在類初始化時(shí)首先執(zhí)行)和普通成員晌梨,其初始化順序只與其在類定義中的順序有關(guān)桥嗤,和其他因素?zé)o關(guān)。
例如下面的例子:
運(yùn)行結(jié)果為
static 塊 1? 執(zhí)行
靜態(tài)成員staticSam1初始化
靜態(tài)成員staticSam2初始化
static 塊 2? 執(zhí)行
--------靜態(tài)成員
sam1成員初始化
sam2成員初始化
--------普通成員
Test默認(rèn)構(gòu)造函數(shù)被調(diào)用
--------構(gòu)造函數(shù)
2 Java繼承情況下的初始化順序:
運(yùn)行結(jié)果:
父類 static 塊 1? 執(zhí)行
父類 靜態(tài)成員staticSam1初始化
父類 靜態(tài)成員staticSam2初始化
父類 static 塊 2? 執(zhí)行
--------父類靜態(tài)成員初始化
子類 靜態(tài)成員staticSamSub初始化
子類 靜態(tài)成員staticSamSub1初始化
子類 static 塊? 執(zhí)行
-------子類靜態(tài)成員初始化
父類 sam1成員初始化
父類 sam2成員初始化
父類 Test默認(rèn)構(gòu)造函數(shù)被調(diào)用
-------父類普通成員初始化和構(gòu)造函數(shù)執(zhí)行
子類 sam1成員初始化
子類 sam2成員初始化
子類 TestSub 默認(rèn)構(gòu)造函數(shù)被調(diào)用
-------父類普通成員初始化和構(gòu)造函數(shù)執(zhí)行
由此得出Java初始化順序結(jié)論:
1 繼承體系的所有靜態(tài)成員初始化(先父類仔蝌,后子類)
2 父類初始化完成(普通成員的初始化-->構(gòu)造函數(shù)的調(diào)用)
3 子類初始化(普通成員-->構(gòu)造函數(shù))