首页 > 解决方案 > 这可以处理堆栈溢出错误吗?

问题描述

enter code here
static int i=10;
    static void m1()
    {
        try {
            if(i>=0)
            {
                System.out.println(i);
                i--;
            } 
            
            m1();
        }
        catch (Throwable e) {
            System.out.println("hii");
        }
    }
    public static void main(String[] args) {
        
        m1();
    }

1)通过这种方式我们可以处理堆栈溢出错误,但实际上java不允许我们处理错误。2)第二点是当我们在 try 块中得到一个异常时,一个 then 唯一受尊重的 catch 块将被执行,但在我们的场景中,我们在 try 块中得到一个错误,但是当我们使用 throwable e 而不是异常 e 时,catch 块正在执行。

如果有人知道这种情况背后的原因,请在上面发短信..

标签: javaexceptionstack-overflow

解决方案


这可以处理堆栈溢出错误吗?

是的。StackOverflowError 并不特别:它是一个 Throwable,因此您可以捕获它。

您在这里遇到的问题是您在堆栈的最顶端(即即将溢出时)捕获并处理 StackOverflowError。

调用时会出现 StackOverflowError ,m1()因为您无法再调用m1()m1()但这与调用本身无关,它与调用任何方法有关。

因此,当您尝试处理它时,您正在调用一个方法 ( System.out.println),并且您会得到另一个 StackOverflowError,它是从 而catch不是try.

你不应该尝试处理 StackOverflowErrors:相反,重构你的逻辑,这样你就永远不会接近溢出。


推荐阅读