有人可以解释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
答案 0 :(得分:1)
是的,java从中恢复过来。 抛出StackOverflowError时,它会通过所有show()方法展开堆栈,直到它返回到catch块。此时只有main()留在堆栈上,您可以继续执行程序而不会出现问题。
您的调用堆栈将如下所示:
main()
show()
show()
show()...
无论你的堆栈内存是多么深入,当最后一个show()方法获得异常时,它会将它抛出到每个show方法,该方法会重新扫描它直到它到达main中的catch块并打印出错误。
答案 1 :(得分:0)
正如Tim所说,你没有处理StackOverflowError,相反,如果有可能尝试更好的方法,如迭代或在几次调用后完成调用堆栈。