try-catch-finally - 为什么最终 block 存在?

标签 try-catch-finally

在大多数编程语言中,都可以在 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 ,如果没有 finallyalwaysExecuted 将不会执行(请不要尝试通过捕获 Throwable 来“修复”此问题)。

或者说 executedWhenFailed() 本身抛出异常:在添加一些信息后从 catch block 重新抛出异常是很常见的。同样,alwaysExecuted() 不会在第二个代码段中执行。

或者假设您有 returnsensitiveFunction(); 而不仅仅是一个调用。等等等等

关于try-catch-finally - 为什么最终 block 存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431725/

相关文章:

c# - 如果我从 C# 中的 try/finally block 中返回,finally 中的代码是否总是运行?

java - 如何尝试......最终在内部工作

java - 在 finally block 中关闭文件不起作用

django - **finally :* clause? 的语法错误在哪里

java - 异常处理 : Getting different output in each run for same code

PowerShell Try Catch 错误处理函数不显示我的自定义警告消息

java - 在 Java 中,当 catch block 和 finally block 都抛出异常时会发生什么?

java - 如何在 Java 中正确使用 try-catch-finally block ?

java - 在 Java 中使用 finally block 捕获异常及其消息

java - 为什么finally在java中有用?