-3

我们在代码中使用 try catch 块。我想在这里问的是,使用 finally 块是一个很好的做法。我在代码中没有看到太多 finally 块。这是不好的做法吗?

4

4 回答 4

5

Catch:当出现问题时。
最后:当某事/没有出错时。

当您想要做某事时,即使是否抛出异常, finally 块也会帮助您。比如关闭数据库连接,释放资源。您不能在 catch 块中执行此操作,因为仅在引发异常时才执行 catch。

问:什么时候使用try-catch
Ans:当抛出异常时你想做点什么

问:什么时候使用try-finally
Ans:即使抛出异常,你也想做一些事情。

问:什么时候使用try-catch-finally
Ans:当你只在抛出异常时想要 x 并且在抛出异常时想要 y 时。

总结一下

try{  

//.....

}
catch{  
   // Something you want to do only when exception is thrown
   // Like OMG evil execption RUN RUN
}  
finally{
   // Something you want to do even the exception is thrown or not  
   // Like who the hell cares about exception
}
于 2013-04-08T13:37:10.450 回答
1

如果您需要处理异常并且在发生错误时仍然必须执行一些代码(通常是清理、处理资源),这当然是一个好习惯。

引用“处理异常的最佳实践”(http://msdn.microsoft.com/en-us/library/seyhszts(v=VS.71).aspx):

在可能产生异常的代码周围使用 try/finally 块,并将您的 catch 语句集中在一个位置。这样,try 语句生成异常,finally 语句关闭或释放资源,catch 语句从中心位置处理异常。

于 2013-04-08T13:40:24.603 回答
1

使用 finally 是一个好习惯。无论是否发生异常,它都会执行。

于 2013-04-08T13:41:37.300 回答
1

如果你在你的程序中做任何数据库操作,那么finally block是不错的选择。所以,在这里使用 finally 块,它会自动关闭数据库。例如:

try
{
 //code of operation
}
catch(Exception error)
{ //code to handle exception
  error.printStackTrace();
}
finally
{ //any code which need to execute mandatory   
  commit();
  db.close();
}

在上面的示例中,try block处理打开的 DB 连接以及插入、检索或更新 DB。catch block处理异常并finally block关闭所有数据库连接。

于 2013-04-08T13:58:48.007 回答