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语句也会因为同样的原因突然完成
(所有路径都有相同的终点,但措辞略有不同。)

因此,总体结果是返回0并丢弃异常


最后
块返回很少是一个好主意。

好吧,当你尝试它时发生了什么,哪一位仍然让你困惑?@JonSkeet return 0 one令人困惑..你尝试过吗?然后你有没有研究为什么你会得到这样的结果?@user2094103,但是这种方法有什么用呢?我们可以知道这个用例吗?