使用 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 中的地址。)
我有一个要执行的测试。无论它是通过还是抛出错误,我都想关闭它打开的案例。我在 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 中的地址。)