類里面定義的變量,如果沒有明確的賦值,Java會保證初始化:內部類型,如整型會初始化為0;如果是對象的引用,會初始化為null。方法里面定義的變量,如果沒有賦值,編譯通不過。
?
對于類內部的變量,初始化的順序如下:
1、所有變量,不管有沒有在定義時賦值,都初始化為null;
2、初始化靜態變量;
3、初始化普通的變量;
4、調用構造函數。
第一點有個簡單的方法驗證一下,寫一個類,在類里按照下面的順序定義兩個變量和一個方法:
??? String x = f();
??? String f(){
?????? return y;
??? }
??? String y = “jprintf”;
產生該類的一個對象,把x輸出來看看是什么結果就知道了。
初始化的順序很容易理解,不過,有一個情況很容易干擾對初始化的理解:如果類里面的變量和方法混雜地定義在一起,那會以一種什么方式初始化呢?簡單的情況,假設這些方法沒有使用這些變量,可以對這些方法視而不見,順序還是上面說的那種順序。
要是在這些方法中使用了這些變量會是什么樣的情況呢?把上面的代碼稍微調整一下:
??? String x = f();
??? String f(){
?????? y = “lj_”+y;
?????? return y;
??? }
??? String y = “jprintf”;
y初始化成了lj_null。可以這樣理解這種情況,也是要注意的情況:這個變量還沒有正確初始化,就使用了。