私は2つのクラスの参照を相互に保存する問題に取り組んでいました
例えば:
class A {
B b;
A(B b){
this.b = b;}
}
class B {
A a;
B(A a){
this.a = a;}
}
public static void main(String...s){
A a = new A(new B(null));
a.b.a = a;
}
上記の初期化の代わりに、以下のステートメントを使用すると:
A a = new A(new B(a));
私は非常に明白な以下のエラーを得ました:
Main.java:19: error: variable a might not have been initialised
A a = new A(new B(a));
しかし、JShellで同じことを試してみると、問題なく動作します(初期化されていないことを念のために確認するために、以前に初期化されていないことを確認するステートメントを実行する直前variable a
にチェックしました:variable a
ここで何かが足りないかもしれませんが、JAVA で実行されている同じステートメントの 2 つの異なる動作がある理由を理解するのを手伝ってくれませんか。
この問題を理解する簡単な方法は、以下のステートメントは通常のプログラムでは許可されていますJshell
が、通常のプログラムでは許可されていないということです。
var somevar = somevar;