Java - 在其构造函数中实例化同一类的对象

时间:2012-01-31 18:28:34

标签: java constructor stack-overflow

为什么在构造函数中实例化同类的对象会抛出StackOverflowError? 例如,

public class A {
    public A () {
        A a = new A() 
    }
}

会抛出StackOverFlowError

2 个答案:

答案 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。