为什么在下面的场景中会出现 StackOverflowError?

Why does StackOverflowError occur in the below scenario?

public class B {

    public static void main(String[] args) {
        A a = new A();
    }
}

public class A {

    A b = new A();
}

因为每个 A 都会创建一个名为 b 且类型为 A 的内部字段。这是无限递归的,因为要创建一个 b,您还必须创建一个 A(它会添加另一个 b)。因为初始值设定项被复制到默认构造函数,所以您的示例等同于

public class A {
   // A b=new A(); 
   A b;
   public A() {
       super();
       b = new A();
   }
}

我不明白你的要求。为什么要在同一个 class 中声明实例变量。它的行为就像一个递归循环。从 main 方法中,它将尝试创建 class A 的对象,并且在该对象创建期间,它将尝试初始化变量 "a"。结果,它将再次创建 A 的另一个实例,依此类推。