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 块并且错误是打印。
谁能解释一下 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 块并且错误是打印。