使用 finally 没有捕获

Using finally without a catch

我有一个要执行的测试。无论它是通过还是抛出错误,我都想关闭它打开的案例。我在 class String 的顶部有 theCase = null; 然后在 executeText() 中,一旦案例打开我就设置它。

所以我这样做了:

try {
    executeTest(tContext);
} catch (Throwable t) {
    throw t;
} finally {
    if (theCase != null) {
      closeCase(user, theCase);
    }
}

我在想。我需要 catch (Throwable t) 吗?我仍然希望抛出错误,但首先我希望它能结案。不抓不扔,最后就不扔了吗?还是不会被捕获并抛出异常而不执行finally?最后有点不清楚

无论是否抛出异常,或者是否从 catch 块中重新抛出,finally 都会被执行。

Do I need the catch (Throwable t)?

不,你不知道。

事实上,这是有害的,因为如果你像那样捕获并抛出 Throwable,那么对于某些版本的 Java,你将需要将封闭方法声明为 throws Throwable ... 等等。 (那是 Java 8, IIRC 中的地址。)