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