为什么在下面的场景中会出现 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 的另一个实例,依此类推。
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 的另一个实例,依此类推。