本題執(zhí)行順序與結(jié)果問題。
輸出結(jié)果為什么不是這樣子?main函數(shù)上面3個輸出完不應(yīng)該就到創(chuàng)建hello了,創(chuàng)建hello2都要執(zhí)行一次num2初始化塊和num3這個構(gòu)造方法,為什么hello沒有啊,請大家對比下輸出結(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é)果打字太著急,多打了幾個字給大家造成誤解抱歉
2018-09-25
運行結(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賦值”
至于為什么運行結(jié)果順序是上面那樣?
因為程序運行時靜態(tài)初始化塊最先被執(zhí)行,然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法。另外,由于靜態(tài)初始化塊只在類加載時執(zhí)行一次,所以當再次創(chuàng)建對象 hello2 時并未執(zhí)行靜態(tài)初始化塊。
2018-09-25
輸出結(jié)果是根據(jù)我們自己寫的代碼來的,如果寫的代碼中都沒有“非靜態(tài)”三個字,怎么會輸出“非靜態(tài)”呢?之所以會出現(xiàn)這些結(jié)果,是因為我們事先在特定位置寫上特定的字,這樣特定的字會根據(jù)運行的先后順序顯示。