我见过有人说不带参数使用 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 之后的代码不会)。
不然最后有什么特别的?
最大的区别是它try...catch会吞下异常,隐藏发生错误的事实。try..finally将运行您的清理代码,然后异常将继续运行,由知道如何处理它的东西处理。
try...catch
try..finally