>我需要跟踪以下代码。会发生什么?我走到了这一步...
让我们开始(现在尝试 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()
。