Java 故意引发运行时异常
我正在执行以下代码:Java 故意引发运行时异常,java,exception-handling,Java,Exception Handling,我正在执行以下代码: public int returnSomething() { try { throw new RuntimeException("foo!"); } finally { return 0; } } 请解释这段代码的作用。我的分析是,我们在方法内部抛出一个运行时异常,但在那之后,“finally”块肯定会执行。正确吗?最终块的内容总是被执行。我知道它不会执行的唯一几个原因是当您拔掉插头或JVM崩溃时。所以我估计它将返回
public int returnSomething() {
try {
throw new RuntimeException("foo!");
} finally {
return 0;
}
}
请解释这段代码的作用。我的分析是,我们在方法内部抛出一个运行时异常,但在那之后,“finally”块肯定会执行。正确吗?最终块的内容总是被执行。我知道它不会执行的唯一几个原因是当您拔掉插头或JVM崩溃时。所以我估计它将返回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);
}
}
答案就在后面。您需要注意,返回被视为“突然完成”:
- 如果try块的执行由于抛出值V而突然完成,则有一个选择
- [……]
- 如果finally块由于任何原因突然完成,那么try语句也会因为同样的原因突然完成
从
最后
块返回很少是一个好主意。好吧,当你尝试它时发生了什么,哪一位仍然让你困惑?@JonSkeet return 0 one令人困惑..你尝试过吗?然后你有没有研究为什么你会得到这样的结果?@user2094103,但是这种方法有什么用呢?我们可以知道这个用例吗?