异常处理 Try-catch:如果变量 1、2 和 3 为假会发生什么情况



>我需要跟踪以下代码。会发生什么?我走到了这一步...

让我们开始(现在尝试 f)F 开始下一次抛出 Exc1,因为 var1 = 假我是否应该返回 main 尝试并转到方法 d?

void main() {
    println("Let's start");
    try {
        f();
        d();
    } catch (Ex1 ex) {
        println("main caught Ex1");
    } catch (Ex3 ex) {
        println("main caught Ex3");
    } finally {
        println("main finally");
    }
    println("main end");
}
void f() {
    println("F begins");
    try {
        if (var1) {
            d();
        } else {
            throw new Ex1();
        }
    } catch (Ex2 ex) {
        println("f caught Ex2");
    }
    println("a end");
}
void d() {
    println("d begin");
    try {
        if (var2) throw new Ex2();
        if (var3) throw new Ex3();
    } catch (Ex3 ex) {
        println("d caught ex3");
    } finally {
        println("d finally");
    }
    println("d end");
}

在此代码中:

try {
    f();
    d();
} catch (Ex1 ex) {
    println("main caught Ex1");
} catch (Ex3 ex) {
    println("main caught Ex3");
} finally {
    println("main finally");
}

如果f()引发异常,则try块将退出。 无论是否捕获异常,main()都不会调用d()。 如果有一个catch块捕获异常,它将被执行,然后执行finally块;否则,将执行finally块,然后再次引发异常。 但在这两种情况下,都不会调用d()

相关内容

最新更新