如果我们同时尝试进行资源清理,是否可以避免finally阻塞?

时间:2018-11-26 11:34:39

标签: java exception-handling try-catch-finally

如果我们尝试并抓住来进行资源清理,是否可以避免最终阻塞?

例如 我们可以做这样的事情并且最终不使用吗?

try{
 // Some statements
 db.close();
}catch(Exception e){
 db.close();
}

它将按预期工作吗?如果,那么我们为什么应该或不应该使用它?

5 个答案:

答案 0 :(得分:2)

只需使用try-with-resources

try(Connection db = getConnection()){
    //perform stuff
}

try块完成处理后,Connection将关闭。

答案 1 :(得分:0)

是的,我们可以。但是,为什么您要两次调用相同的代码,而不是要在任何情况下都执行一次调用?

有关最佳做法,请参见此问题Java try/catch/finally best practices while acquiring/closing resources

答案 2 :(得分:0)

这可以按预期工作,但是它会重复代码,这意味着,如果您想更改“最终零件代码”,则必须将代码更改两次,而不是将其放入finally块中。 / p>

答案 3 :(得分:0)

是的,它将起作用。最后,block基本上用于 try / catch 中的常见操作。但是考虑一下,您在尝试和抓住中都有10到20条共同的陈述。那会是什么样子? 最终阻止可帮助您消除代码的冗余。

答案 4 :(得分:0)

请尽可能使用try-with-resources或进行try-finally(try-catch-finally)。

  

如果我们尝试同时进行资源清理,是否可以避免finally阻塞?

为什么?您可以通过使用错误的代码并使用一些反模式来替代运行良好且为此目的设计的Java习惯用法。

假设您将在现实生活中记录或处理异常,这就是为什么您的代码不同的原因:

不起作用:

  • 您的连接并不总是关闭的,因为您只处理异常,没有错误或抛出的东西

一些反模式:

  • 您正在重新发明轮子
  • 干(不要重复自己)
  • 首先捕获最具体的异常;避免一般地处理异常,错误或可投掷
  • 请注意吞咽异常(最后也可能!),try-with-resources为此使用了抑制异常。
  • ...