StackOverFlowError 处理和 Java 恢复

StackOverFlowError Handling and Java Recovery

谁能解释一下 WhosebugError 是如何工作的?

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

示例代码:

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

        display();    
    }

    static void show() {
        show();
    }

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

输出为:

java.lang.WhosebugError

After WhosebugError

Hello New Function

正如 Tim 所说,您不处理 WhosebugError,而是尽可能尝试更好的方法,如迭代或在多次调用后完成调用堆栈。

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

您的调用堆栈如下所示:

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

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