我正在解决一个问题,将两个类的引用相互存储
例如:
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 中执行同一语句有两种不同的行为。
理解这个问题的一个简单方法是允许在正常程序中使用以下语句,Jshell
但在正常程序中不允许:
var somevar = somevar;