在下面的代码中,方法A()
和B()
相互递归调用,从而导致StackOverFlow
错误。捕获到此错误后,由于堆栈已经溢出并且需要将方法C()->D()->E()
放入调用堆栈中,因此程序如何继续执行正常的执行流程。
package staticTryOuts;
class Test
{
public static void main(String[] args) {
try {
A();
}catch(Error e) {
System.out.println(e);
}
System.out.println("Hello");
C();
}
static void A() {
System.out.println("Hello from A");
B();
}
static void B() {
System.out.println("Hello from B");
A();
}
static void C() {
System.out.println("Hello World from c.");
D();
}
static void D() {
System.out.println("Hello world from D");
E();
}
static void E() {
System.out.println("Hello world from E");
}
}
答案 0 :(得分:1)
抛出异常意味着它会向后传播到堆栈,从而消除并清除堆栈帧。等到异常返回到最顶端的catch
块时,堆栈基本上又变空了,并为C
,{{1}的方法调用的其他堆栈帧留出了空间}和D
。