2

可能重复:
为什么在 Try ... Catch 中使用 finally

为什么我们不应该使用 catch 块来清理代码?

我没有过多地使用错误处理技术,但现在开始将它们用于几乎每个程序。关于时间

因此,在浏览文章/文档时,我遇到了 finally 块。

正如它所暗示的,无论是否存在异常,finally 块都会运行(当然,如果 JVM 或 PC 强制关闭,它不会运行)。finally 块通常用于清理代码(资源)。

所以基本上,如果我的代码没有出现异常,那我为什么要清理代码。我不应该将清理代码放在 catch 块而不是 finally 块中。

我尝试寻找类似的问题,但似乎没有人问过这个问题。所以我继续提出了一个问题:D

4

2 回答 2

7

因为该catch不能保证执行。finally块确实有这样的保证,除非您将电源线踢出墙壁。

于 2012-10-30T23:30:26.723 回答
1

正如@RobertHarvey 指出的那样,该catch不能保证执行,因此该finally块是避免使用此类代码以使您的代码更清晰:

    try
    {
        // do something
    }
    catch(Exception e)
    {
        // error handling
        // clean up
    }
    // clean up

这样你就可以像这样:

    try
    {
        // do something        
    }
    catch(Exception e)
    {
        // error handling
    }
    finally
    {
        // clean up
    }

如果您想要执行第一个代码,该finally块将为您提供帮助,即您想要清理(例如关闭文件),无论是否有异常,如果您只想在发生错误时清理,您CAN清理在 catch 块中。

于 2012-10-31T00:16:20.293 回答