从构造函数抛出未检查的异常时面临java.lang.StackOverflowError



我试图运行下面的代码示例,但出现StackOverflow错误。它似乎陷入了无限循环。有人能帮我知道这里发生了什么吗?

请找到以下代码片段

public class ConstructorExample {
    private ConstructorExample c1 = new ConstructorExample();
    public ConstructorExample(){
        throw new RuntimeException();
    }
    public static void main(String[] str){
        ConstructorExample c = new ConstructorExample();
    }
}

您拥有private ConstructorExample c1=new ConstructorExaample();在ConstructorExample类中。

当您实例化ConstructorExample的第一个实例时,JVM为该ConstructorExa范例分配内存,然后尝试实例化第一个成员c1。这个实例化从为另一个ConstructorExample实例分配内存开始,依此类推

此外,运行时异常是不相关的,因为成员初始值设定项是在构造函数之前执行的。

如预期。尝试从main方法创建ConstructorExample的实例,在调用构造函数之前初始化实例变量。

private ConstructorExample c1 = new ConstructorExample();

然后,它再次重复这个循环,并继续分配越来越多的内存,导致堆叠,甚至没有完全创建一个实例。

相关内容

  • 没有找到相关文章

最新更新