为什么可以从StackOverflowError中恢复?
2022-08-31 10:14:09
我很惊讶,即使在Java中发生StackOverflowError
之后,它也可以继续执行。
我知道这是类错误。类 Error 被降级为“Throwable 的子类,指示合理的应用程序不应尝试捕获的严重问题”。StackOverflowError
这听起来更像是一个建议,而不是一个规则,它假设像StackOverflowError这样的错误实际上是允许的,这取决于程序员的合理性不这样做。看,我测试了这个代码,它正常终止。
public class Test
{
public static void main(String[] args)
{
try {
foo();
} catch (StackOverflowError e) {
bar();
}
System.out.println("normal termination");
}
private static void foo() {
System.out.println("foo");
foo();
}
private static void bar() {
System.out.println("bar");
}
}
这怎么可能?我认为当StackOverflowError被抛出时,堆栈应该已经满了,以至于没有空间调用另一个函数。错误处理块是否在不同的堆栈中运行,或者这里发生了什么?