2

有一个很好的问题,当从 finally 中抛出异常时,Catch 块没有被评估,它正在讨论在 finally 块中抛出异常的一些有时意想不到的结果。

我想不出任何好的理由为什么要在 finally 块中抛出异常。如果之前有异常,它总是会丢失。我总是看到 finally 习惯于以不应该抛出异常的方式进行清理。

谁能解释什么时候在 finally 块中引发异常是合适的?

4

3 回答 3

1

当你Exception抛出 finally 时,它会向上传播,最重要的Exception是在抛出的点停止,因此 finally 的其余部分不会被执行。此外,如果 try 块中发生异常,它将消失,并且当前异常将从 finally 块中抛出。

我无法想到任何情况,例如您最终Exception出于特定原因在调用者级别抛出然后处理它(可能有其他方法来管理此类逻辑),因此您可以在调用者处水平过程进一步基于Exception抛出。

我只能说,以后所有阅读并尝试遵循代码的眼睛都会有一个健康的惊喜。

于 2012-08-28T05:31:56.300 回答
1

很好,.NET 很好地支持。问题是捕捉异常,这是一个非常糟糕的做法。您正确恢复程序状态的几率非常低。

于 2012-08-28T05:42:57.763 回答
1

try catch finally 是非常重要的构造。可以肯定的是,即使抛出异常,finally块中的代码也会被执行。处理外部资源以释放它们非常重要。垃圾收集不会为您做到这一点。在 finally 部分中,您不应该有 return 语句或抛出异常。这样做是可能的,但这是一种不好的做法,可能会导致不可预知的结果。

于 2012-08-28T04:51:48.160 回答