此Java程序如何处理StackOverFlow错误并继续正常执行流程

时间:2019-01-18 10:32:55

标签: java exception

在下面的代码中,方法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");

    }
}

1 个答案:

答案 0 :(得分:1)

抛出异常意味着它会向后传播到堆栈,从而消除并清除堆栈帧。等到异常返回到最顶端的catch块时,堆栈基本上又变空了,并为C,{{1}的方法调用的其他堆栈帧留出了空间}和D