我需要跟踪以下代码。会发生什么? 我已经走到这一步了...
让我们开始(现在尝试 f) F 开始下一次抛出 Exc1,因为 var1 = false 现在我要返回到 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
block 将退出。无论是否捕获异常,main()
都不会调用d()
。如果有catch
block 捕获异常,则会执行该异常,然后执行finally
block ;否则,finally
block 将被执行,然后再次抛出异常。但在这两种情况下,d()
都不会被调用。
关于java - 异常处理 Try-catch : What happens if var 1 , 2 和 3 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788777/