2

使用 Try Catch finally 块的最佳做法是什么?你喜欢只使用 try finally 块而不是 try catch 块吗?我一直认为 try catch finally 是最好的做法。但是,在我正在使用的部分代码中,我看到了这样的代码:

尝试{ doSomething(); } 最后{ doSomethingElse(); }

因为他们没有捕捉到异常,所以我很难调试代码。对我来说,不使用 catch 并且只使用 finally 并不是一个真正的好习惯,但我可能错了。

据我所知,这并不是一个真正的好习惯。基本上,我们没有使用 try catch 的用途。我也发现了类似的问题

我的问题是:“您是否同意我对以下假设的看法:最佳实践是一起使用 try catch finally 而不是 try finally。” 如果您不同意,请您提供一个示例,说明何时使用 try finally 而不是 try catch finally 以及为什么您认为 try finally 比 try catch 更好?

4

5 回答 5

6

我不同意,如果你不能对抛出的异常做任何事情,但是你的调用者层次结构可以做任何事情,那么使用 finally 来清理你的资源并让调用者在抛出异常后处理清理。

于 2013-04-03T18:50:49.243 回答
1

构造的目的finally是提供始终执行的代码,即使抛出异常也是如此。

try / finally(无捕获)允许您编写保证执行的代码,即使 try 块内的代码抛出运行时异常也是如此。

这在您使用的代码可能会引发运行时异常但不会引发已检查异常的情况下非常有用。一个例子是 Spring DAO 支持;它将 IOExceptions 包装在运行时异常中。

于 2013-04-03T18:54:25.733 回答
1

通常 try-finally 用于确保执行某些代码,而不管是否发生异常。通常缺少 Catch 块,因为 try 块中的代码不会抛出任何可以捕获的已检查异常。

例如:

try  {

        if(str.length() > 0) { // If str is null, it can throw NullPointer and hence code below it wont execute
            // some code
        }

    }finally {
        // Will be performed even if any unchecked exception is thrown
        // Must contain code which has to be performed at any cost like releasing occupied memory
    }
于 2013-04-03T18:54:56.740 回答
1

共有三种可能,try+catch、try+finally 或 try+catch+finally。它们都有它们的用途。

当你可以做一些有用的事情来处理异常时,将 catch 与 try 一起使用,例如报告异常发生的事实。

finally 块中的代码始终运行,与是否发生异常无关,因此在需要清理时使用 finally 和 try 总是要发生的。一个示例是如果文件已成功打开,则将其关闭。

于 2013-04-03T18:55:14.723 回答
1

我不同意。

try{}finally{} 应该用于您无法处理异常但需要清理资源的情况。

try{}finally{} 块不会像您想象的那样导致异常“消失”。它将被抛出堆栈并在其他地方处理。如果您在当前应用程序中看不到异常,那是因为它被扔到了别处。

try {
    connection = createConnection();
}
finally {
    closeConnection(connection) //Free database connection.
}

在这种情况下,您可能没有任何处理 SQL 异常的能力,但您仍然希望释放数据库连接。

于 2013-04-03T18:59:21.503 回答