小编典典

为什么 try {...} finally {...} 好;尝试 {...} catch{} 不好?

all

我见过有人说不带参数使用 catch 是不好的形式,特别是如果那个 catch 没有做任何事情:

StreamReader reader=new  StreamReader("myfile.txt");
try
{
  int i = 5 / 0;
}
catch   // No args, so it will catch any exception
{}
reader.Close();

但是,这被认为是好的形式:

StreamReader reader=new  StreamReader("myfile.txt");
try
{
  int i = 5 / 0;
}
finally   // Will execute despite any exception
{
  reader.Close();
}

据我所知,将清理代码放在 finally 块中和将清理代码放在 try..catch 块之后的唯一区别是,如果你的 try 块中有 return
语句(在这种情况下,finally 中的清理代码将运行,但 try..catch 之后的代码不会)。

不然最后有什么特别的?


阅读 82

收藏
2022-06-30

共1个答案

小编典典

最大的区别是它try...catch会吞下异常,隐藏发生错误的事实。try..finally将运行您的清理代码,然后异常将继续运行,由知道如何处理它的东西处理。

2022-06-30