为什么堆栈溢出错误在init中出现

Aka*_*ari 0 java stack-overflow initialization

我有一个代码导致堆栈溢出问题,因为发生了不受控制的递归

public class Flaw {

    Flaw() {
        System.out.println("There");
    }

    Flaw obj = new Flaw();

    public static void main(String[] args) {
        new Flaw();
        System.out.println("Hi");
    }

}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么Flaw()构造函数不打印任何东西?

Era*_*ran 5

Flaw构造函数的主体可以执行(执行println语句)之前,会初始化类的实例变量.在您的情况下,这意味着Flaw obj=new Flaw();变量,它创建另一个Flaw实例,触发另一个构造函数调用,依此类推......

无限的构造函数调用链导致StackOverflowError.