我正在阅读以下代码:
public int returnSomething() {
try {
throw new RuntimeException("foo!");
} finally {
return 0;
}
}
请解释这段代码正在做什么。我的分析是我们在方法中抛出一个运行时异常,但在那之后,“finally”块肯定会执行。这是对的吗?
答案 0 :(得分:1)
答案在Java Language Specification section 14.20.2。你需要知道返回计为“突然完成”:
...
如果由于抛出值V而导致try块的执行突然完成,则可以选择
- [...]
- 如果finally块因任何原因突然完成,则try语句会因同样的原因突然完成。
(所有路径都有相同的最终点,但措辞略有不同。)
因此总体结果是返回0并且异常被丢弃。
从finally
区块返回是一个不错的主意。
答案 1 :(得分:0)
始终执行finally块的内容。我知道它不会执行的唯一几个原因是你拉动插头或你的JVM崩溃。所以我认为这将返回0。
答案 2 :(得分:0)
快速测试显示它返回0,而不是传播RuntimeException。
public class Test {
public static int returnSomething() {
try {
throw new RuntimeException("foo!");
} finally {
return 0;
}
}
public static void main(String[] args) {
int i=returnSomething();
System.out.println(i);
}
}