【发布时间】:2013-08-08 11:33:57
【问题描述】:
我有一个关于 try-catch 结构的理论上小问题。
我昨天参加了关于 Java 的实践考试,但我不明白以下示例:
try {
try {
System.out.print("A");
throw new Exception("1");
} catch (Exception e) {
System.out.print("B");
throw new Exception("2");
} finally {
System.out.print("C");
throw new Exception("3");
}
} catch (Exception e) {
System.out.print(e.getMessage());
}
问题是“输出会是什么样子?”
我很确定它会是 AB2C3,但令人惊讶的是,这不是真的。
正确答案是 ABC3(经过测试,确实是这样)。
我的问题是,Exception("2") 去哪儿了?
【问题讨论】:
-
+1 啊,伙计,我知道这个答案。我在一次采访中被问到这个问题。这是一个很好的问题,有助于理解 try/catch/finally 在堆栈上的工作方式。
-
只有一个打印语句可以打印一个数字(最后一个:
print(e.getMessage()))。你以为输出会是AB2C3:你以为最外面的catch块会被执行两次吗? -
在java中,在执行将控制权转移出catch块的指令之前,如果finally块存在,就会执行它。如果只有 finally 块中的代码没有将控制权转移到外部,则执行 catch 块中的延迟指令。