討論code 大多數(shù)人會(huì)認(rèn)為如果main之后,肯定是先打印出靜態(tài)代碼塊內(nèi)容
如果你也這樣認(rèn)為就錯(cuò)了
要知道當(dāng)main運(yùn)行之后
- A. 加載字節(jié)碼到內(nèi)存(從上到下加載姑原,此時(shí)為加載完整滞谢,因?yàn)橐驗(yàn)殪o態(tài)n還未加載)
- B. 從上到下加載靜態(tài)方法加載 k->Test t1
當(dāng)發(fā)現(xiàn)Test是要實(shí)例的時(shí)候執(zhí)行順序是:非靜態(tài)成員變量->非靜態(tài)代碼塊->構(gòu)造
實(shí)例化順序:加載 a j
1:j i=0 n=0 因?yàn)閗已經(jīng)加載了所以是0髓迎,++k 是先賦值所以就是1[非靜態(tài)成員變量]
2:代碼塊 i=1 n=1 [非靜態(tài)代碼塊]
構(gòu)造器:3:t1 i= n=2[構(gòu)造]
C.加載Test t2, 重復(fù)上面步驟456
4:j i=3 n=3
5:代碼塊 i=4 n=4
構(gòu)造器:6:t2 i= n=5D.此時(shí)加載靜態(tài)i
7:1 i=6 n=6
E.開(kāi)始加載最后一個(gè)靜態(tài)變量n=99后開(kāi)始加載靜態(tài)代碼塊
1:靜態(tài)代碼塊 i=7 n=99F. 到此字節(jié)碼加載完成到內(nèi)存
那么我們?nèi)绾巫C明是這樣呢硅瞧?我們來(lái)做一個(gè)減法!
我們先把需要實(shí)例化的靜態(tài)的成員變量注釋掉杀怠,然后運(yùn)行椰憋,不出意外的話,只加載了字節(jié)碼到內(nèi)存
應(yīng)該只加載了靜態(tài)成員變量->靜態(tài)代碼塊->靜態(tài)方法
總結(jié):
字節(jié)碼加載 : 靜態(tài)成員變量->靜態(tài)代碼塊->靜態(tài)方法
類(lèi)實(shí)例化 : 非靜態(tài)成員變量->非靜態(tài)代碼塊->構(gòu)造
在本案例中:
字節(jié)碼加載包含了類(lèi)實(shí)例化赔退,所以導(dǎo)致了靜態(tài)代碼塊橙依,要等到兩個(gè)實(shí)例化之后最后執(zhí)行证舟,也就是我們所想的先加載靜態(tài)代碼塊,變成了最后才執(zhí)行