本題執(zhí)行順序與結(jié)果問題。
輸出結(jié)果為什么不是這樣子?main函數(shù)上面3個(gè)輸出完不應(yīng)該就到創(chuàng)建hello了,創(chuàng)建hello2都要執(zhí)行一次num2初始化塊和num3這個(gè)構(gòu)造方法,為什么hello沒有啊,請(qǐng)大家對(duì)比下輸出結(jié)果,給我講解一下謝謝。
通過靜態(tài)初始化塊為靜態(tài)變量num3賦值
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
num1:91
num2:74
num3:83
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
2018-09-25
已經(jīng)將懂了謝謝各位,之前提問輸出結(jié)果打字太著急,多打了幾個(gè)字給大家造成誤解抱歉
2018-09-25
運(yùn)行結(jié)果是這樣的:
通過靜態(tài)初始化塊為靜態(tài)變量num3賦值
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
num1:91
num2:74
num3:83
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
關(guān)于為什么不是你那樣,其中最大的原因是程序中本來就沒有你的那些輸出語句“通過非靜態(tài)初始化塊為變量num2賦值”
至于為什么運(yùn)行結(jié)果順序是上面那樣?
因?yàn)槌绦蜻\(yùn)行時(shí)靜態(tài)初始化塊最先被執(zhí)行,然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法。另外,由于靜態(tài)初始化塊只在類加載時(shí)執(zhí)行一次,所以當(dāng)再次創(chuàng)建對(duì)象 hello2 時(shí)并未執(zhí)行靜態(tài)初始化塊。
2018-09-25
輸出結(jié)果是根據(jù)我們自己寫的代碼來的,如果寫的代碼中都沒有“非靜態(tài)”三個(gè)字,怎么會(huì)輸出“非靜態(tài)”呢?之所以會(huì)出現(xiàn)這些結(jié)果,是因?yàn)槲覀兪孪仍谔囟ㄎ恢脤懮咸囟ǖ淖郑@樣特定的字會(huì)根據(jù)運(yùn)行的先后順序顯示。