为什么在构造函数中实例化同类的对象会抛出StackOverflowError
?
例如,
public class A {
public A () {
A a = new A()
}
}
会抛出StackOverFlowError
?
答案 0 :(得分:10)
与使用完全相同的参数无条件地调用自身的任何其他函数完全相同:
public void f() {
f(); // <---- will cause a stack overflow due to infinite recursion
}
该函数不断调用自身,每次调用都需要堆栈空间。堆栈迟早会耗尽,你会遇到异常。
当A()
一直在调用自己时(new A()
),就会发生同样的事情。
答案 1 :(得分:5)
因为new A()
语句将调用A
类的构造函数,该类将调用A
类的构造函数,依此类推。这会产生无限递归。这会导致JVM抛出StackOverflowError
s。