|
之前被面試問到父子類靜態(tài)代碼塊、非靜態(tài)代碼塊、構(gòu)造函數(shù) 一直以來我我認(rèn)為這三者的執(zhí)行順序是靜態(tài)代碼塊、非靜態(tài)代碼塊、構(gòu)造函數(shù)。 網(wǎng)上搜了下也都是這么說的。 就像下面這段代碼:
執(zhí)行結(jié)果 ===== 父類--靜態(tài)代碼塊 子類--靜態(tài)代碼塊 父類--非靜態(tài)代碼塊 父類--構(gòu)造函數(shù) 子類--非靜態(tài)代碼塊 子類--構(gòu)造函數(shù) 可是靜態(tài)代碼塊真的會(huì)一定在非靜態(tài)代碼塊之前執(zhí)行嗎? 下面這段代碼
執(zhí)行結(jié)果 ===== 父類--非靜態(tài)代碼塊 父類--構(gòu)造函數(shù) 父類--靜態(tài)代碼塊 父類--非靜態(tài)代碼塊 父類--構(gòu)造函數(shù) 子類--非靜態(tài)代碼塊 子類--構(gòu)造函數(shù) 子類--靜態(tài)代碼塊 父類--非靜態(tài)代碼塊 父類--構(gòu)造函數(shù) 子類--非靜態(tài)代碼塊 子類--構(gòu)造函數(shù) ===== 可以發(fā)現(xiàn)非靜態(tài)代碼塊并不是一定在靜態(tài)代碼塊之后執(zhí)行的。 我認(rèn)為此時(shí)private static ExA a = new ExA()是靜態(tài)變量。而java里面靜態(tài)變量與靜態(tài)代碼塊是按代碼先后順序執(zhí)行。所以就導(dǎo)致非靜態(tài)代碼塊在靜態(tài)代碼塊之前執(zhí)行。 |
|
|