本題執行順序與結果問題。
輸出結果為什么不是這樣子?main函數上面3個輸出完不應該就到創建hello了,創建hello2都要執行一次num2初始化塊和num3這個構造方法,為什么hello沒有啊,請大家對比下輸出結果,給我講解一下謝謝。
通過靜態初始化塊為靜態變量num3賦值
通過初始化塊為變量num2賦值
通過構造方法為變量num1賦值
通過初始化塊為變量num2賦值
通過構造方法為變量num1賦值
num1:91
num2:74
num3:83
通過初始化塊為變量num2賦值
通過構造方法為變量num1賦值
2018-09-25
已經將懂了謝謝各位,之前提問輸出結果打字太著急,多打了幾個字給大家造成誤解抱歉
2018-09-25
運行結果是這樣的:
通過靜態初始化塊為靜態變量num3賦值
通過初始化塊為變量num2賦值
通過構造方法為變量num1賦值
num1:91
num2:74
num3:83
通過初始化塊為變量num2賦值
通過構造方法為變量num1賦值
關于為什么不是你那樣,其中最大的原因是程序中本來就沒有你的那些輸出語句“通過非靜態初始化塊為變量num2賦值”
至于為什么運行結果順序是上面那樣?
因為程序運行時靜態初始化塊最先被執行,然后執行普通初始化塊,最后才執行構造方法。另外,由于靜態初始化塊只在類加載時執行一次,所以當再次創建對象 hello2 時并未執行靜態初始化塊。
2018-09-25
輸出結果是根據我們自己寫的代碼來的,如果寫的代碼中都沒有“非靜態”三個字,怎么會輸出“非靜態”呢?之所以會出現這些結果,是因為我們事先在特定位置寫上特定的字,這樣特定的字會根據運行的先后順序顯示。