我想写一些尝试并捕获捕获任何类型或异常,这个代码是否足够(这是在Java中的方式)?
try {
code....
}
catch (Exception ex){}
Run Code Online (Sandbox Code Playgroud)
或者它应该是
try {
code....
}
catch {}
Run Code Online (Sandbox Code Playgroud)
?
Mar*_*ers 56
两种方法都将捕获所有异常.您的两个代码示例之间没有显着差异,除了第一个将生成编译器警告,因为ex已声明但未使用.
但请注意,一些例外是特殊的,将自动重新抛出.
ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发.
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
正如评论中所提到的,捕获和忽略所有异常通常是一个非常糟糕的主意.通常您想要执行以下操作之一:
捕获并忽略您知道并非致命的特定异常.
catch (SomeSpecificException)
{
// Ignore this exception.
}
Run Code Online (Sandbox Code Playgroud)捕获并记录所有异常.
catch (Exception e)
{
// Something unexpected went wrong.
Log(e);
// Maybe it is also necessary to terminate / restart the application.
}
Run Code Online (Sandbox Code Playgroud)捕获所有异常,进行一些清理,然后重新抛出异常.
catch
{
SomeCleanUp();
throw;
}
Run Code Online (Sandbox Code Playgroud)请注意,在最后一种情况下,使用throw;和不使用重新抛出异常throw ex;.
请注意,除了所有其他评论之外,还有一个小差异,为了完整起见,应在此处提及!
使用空 catch 子句,当程序集标记为“RuntimeCompatibility(WrapNonExceptionThrows = false)”(自 CLR2 以来默认为 true)时,您可以捕获非 CLSCompliant 异常。[1][2][3]
[1] http://msdn.microsoft.com/en-us/library/bb264489.aspx
[2] http://blogs.msdn.com/b/pedram/archive/2007/01/07/non-cls-exceptions.aspx
[3] CLR 是否会同时处理 CLS 投诉和非 CLS 投诉异常?
| 归档时间: |
|
| 查看次数: |
85527 次 |
| 最近记录: |