什么时候最后使用尝试,最后不要尝试捕捉

时间:2013-04-03 18:47:22

标签: java exception try-catch

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

尝试{  做一点事(); } 最后{  doSomethingElse(); }

由于它们没有捕获异常,因此我很难调试代码。对我来说,不使用catch只是最后,这不是一个很好的做法,但我可能错了。

据我所知,这不是一个好习惯。基本上,我们没有利用try catch的用途。我也发现了类似的questions

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

5 个答案:

答案 0 :(得分:4)

我不同意,如果你不能对被抛出的异常做任何事情,但你的调用者层次结构可以进一步发展,那么使用finally来清理你的资源并让调用者在抛出异常后处理清理工作。 / p>

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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
    }

答案 3 :(得分:0)

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

当你可以有效地处理异常时,使用catch和try,例如报告异常发生的事实。

finally块中的代码总是运行,与是否发生异常无关,所以最后使用try,当有清理工作时总会发生这种情况。一个例子是关闭文件,如果它已成功打开。

答案 4 :(得分:0)

我不同意。

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

try {} finally {}阻止不会导致异常“消失”,因为您似乎认为它会。它将被抛出堆栈并在其他地方处理。如果您无法在当前应用程序中看到异常,那是因为它被丢弃在其他地方。

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

在这种情况下,您可能无法处理SQL异常,但仍希望释放数据库连接。