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

NIN*_*OOP 3 java stack-overflow constructor

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

public class A {
    public A () {
        A a = new A() 
    }
}
Run Code Online (Sandbox Code Playgroud)

会抛出StackOverFlowError

NPE*_*NPE 10

它与使用完全相同的参数无条件地调用自身的任何其他函数完全相同:

public void f() {
  f(); // <---- will cause a stack overflow due to infinite recursion
}
Run Code Online (Sandbox Code Playgroud)

该函数只是自己调用,每次调用都需要堆栈空间.堆栈迟早会耗尽,你会遇到异常.

A()不断调用自身(in new A())时,会发生完全相同的事情.


Viv*_*sse 5

因为你的new A()语句将调用A类的构造函数,它将调用A类的构造函数,依此类推.这会产生无限递归.这会导致JVM抛出StackOverflowErrors.