在大多数编程语言中,都可以在 try 或 catch block 之后放置一个 finally block ,如下所示:
try {
sensitiveFunction();
} catch (Exception e) {
executedWhenFailed();
} finally {
alwaysExecuted();
}
但是我们可以执行相同的代码,而无需像这样的finally block :
try {
sensitiveFunction();
} catch (Exception e) {
executedWhenFailed();
}
alwaysExecuted();
那么,为什么finally block 会存在呢?有人有一个需要finally block的例子吗?
谢谢
最佳答案
即使这些示例也不等效:如果 sensitiveFunction()
抛出不扩展 Exception
的内容 but Error
instead ,如果没有 finally
,alwaysExecuted
将不会执行(请不要尝试通过捕获 Throwable
来“修复”此问题)。
或者说 executedWhenFailed()
本身抛出异常:在添加一些信息后从 catch
block 重新抛出异常是很常见的。同样,alwaysExecuted()
不会在第二个代码段中执行。
或者假设您有 returnsensitiveFunction();
而不仅仅是一个调用。等等等等
关于try-catch-finally - 为什么最终 block 存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431725/