Java不允許你使用可能還沒有一個方法範圍內初始化的變量。類範圍內的未初始化變量仍然可以由類方法返回,並且該值默認爲null。爲什麼使用未初始化的變量時,java的治療類範圍和方法範圍不同?
爲什麼不同的處理兩個不同的範圍呢?
public class TestClass {
Integer i;
Double d;
public TestClass() {
d = 1d;
}
public Double getD() {
return d;
}
public Integer getI() {
return i;
}
// public Integer getSomeInt() {
// Integer i;
// return i;
// }
public static void main(String[] args) {
TestClass myClass = new TestClass();
System.out.println(myClass.getI().getClass());
}
}
這導致一個NullPointerException,但在返回內getSomeInt i
()是一個編譯器錯誤,因爲「變量可能沒有被初始化」。
謝謝,這是我正在尋找的答案。爲什麼堆分配資源不可能檢查它們是否已初始化? – user831885 2012-07-23 13:31:02
因爲它們可以很容易地發佈到外星代碼甚至其他線程。這使得理論上不可能在第一次讀取之前確保初始化。 – 2012-07-23 13:32:05