1、成員變量(全局變量)是可以不經初始化的,在類加載過程的准備階段即可給它賦予默認值,但局部變量使用前需要顯示賦予初始值,javac不是推斷不出不可以這樣做,而是沒有這么做,對於成員變量而言,其賦值和取值訪問的先后順序具有不確定性,對於成員變量可以在一個方法調用前賦值,也可以在方法調用后進行,這是運行時發生的,編譯器確定不了,交給jvm去做比較合適。
2、而對於局部變量而言,其賦值和取值訪問順序是確定的。這樣設計是一種約束,盡最大程度減少使用者犯錯的可能。假使局部變量可以使用默認值,可能總會無意間忘記賦值,進而導致不可預期的情況出現。