java - 程序抛出堆栈溢出错误

标签 java exception stack-overflow

以下程序可以正确编译。是什么导致了堆栈溢出错误?异常是如何压入堆栈的?

public class Reluctant {

    private Reluctant internalInstance = new Reluctant();

    public Reluctant() throws Exception {
        throw new Exception("I’m not coming out");
    }

    public static void main(String[] args) {
        try {
            Reluctant b = new Reluctant();
            System.out.println("Surprise!");
        } catch (Exception ex) {
            System.out.println("I told you so");
        }
    }
}

最佳答案

您有一个字段初始化代码,它由 javac 编译器自动添加到构造函数主体中。实际上你的构造函数看起来像这样:

private Reluctant internalInstance;

public Reluctant() throws Exception {
    internalInstance = new Reluctant();
    throw new Exception("I’m not coming out");
}

因此它递归地调用自身。

关于java - 程序抛出堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560346/

相关文章:

java - 上传超大 (> 1GB) 文件的建议

java - 无法从 try-catch 嵌套 for 循环中提取字符串

exception - urllib 异常 http.client.BadStatusLine

c++ - 错误 : expected primary-expression before ';' token

java - 这个设计有什么问题导致无限循环?

java - 出现 StackOverflow 错误

java - 如何将数组列表写入 CSV

java - @cacheable 不适用于 Spring Boot。使用ehcache3

java - 使用时异常? : operator in Java 8 lambda expression

java - 使用递归(java)查找给定数字是否是给定集合(允许重复)的总和