Javaでは、メソッドスコープ内で初期化されていない可能性のある変数を使用することはできません。クラススコープ内の初期化されていない変数は、クラスメソッドによって返される可能性があり、値のデフォルトはnullです。
なぜ2つの異なるスコープの異なる扱いですか?
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が発生しi
ますが、getSomeInt()内に戻ると、「変数が初期化されていない可能性がある」ため、コンパイラエラーになります。