StackOverFlowError处理和Java恢复

时间:2017-08-02 02:49:10

标签: java exception stack-overflow

有人可以解释StackOverFlowError如何工作吗?

我知道无休止的递归导致StackOverFlowError,但是在堆栈装满后是否会执行任何其他方法?我已经处理了catch块中的错误。我想知道java如何从已经捕获的错误中恢复或恢复。

示例代码:

public class Test {    
    public static void main(String[] args) {    
        try {
            show();
        } catch(StackOverflowError e) {
            System.out.println(e);
        }    
        System.out.println("After StackOverFlowError");

        display();    
    }

    static void show() {
        show();
    }

    static void display() {
        System.out.println("Hello New Function");
    }    
}

输出是:

java.lang.StackOverflowError

After StackOverFlowError

Hello New Function

2 个答案:

答案 0 :(得分:1)

是的,java从中恢复过来。 抛出StackOverflowError时,它会通过所有show()方法展开堆栈,直到它返回到catch块。此时只有main()留在堆栈上,您可以继续执行程序而不会出现问题。

您的调用堆栈将如下所示:

main()
   show()
      show()
         show()...

无论你的堆栈内存是多么深入,当最后一个show()方法获得异常时,它会将它抛出到每个show方法,该方法会重新扫描它直到它到达main中的catch块并打印出错误。

答案 1 :(得分:0)

正如Tim所说,你没有处理StackOverflowError,相反,如果有可能尝试更好的方法,如迭代或在几次调用后完成调用堆栈。