如果catch和finally块都抛出异常会发生什么?
如果catch和finally块都抛出异常会发生什么?
finally
块抛出异常时,它将有效地隐藏来自catch
块抛出的异常,并且最终被抛出的异常将是finally
块抛出的异常。因此,在捕获异常时记录异常或确保finally
块不会抛出异常非常重要,否则可能会导致抑制并永远不会看到抛出的异常。当catch捕获异常时,finally块将会被执行,然后以异常退出。如果finally块抛出异常,则该块将以异常退出。
adrianbanks已经很好地回答了,但以下帖子应该很有趣:有趣的异常结果:从finally块中抛出异常
throw
之前在finally
中打印一些内容。首先记录第一个异常,然后处理finally
并记录第二个异常。这适用于.NET Framework 1.1到3.5。.NET 4.0仅报告第一个异常。(1.0和4.5不可用。) - Mark Hurd嗨,Nwaman,我认为你的答案是错的。我在 Windows 应用程序中进行了测试,发现如果编写像下面这样的程序:
try
{
string s = "hu";
int i = int.Parse(s);
}
catch (Exception ex)
{
string s = "hu";
int i = int.Parse(s);
throw new Exception();
}
finally
{
MessageBox.Show("hi");
}
而且这最终不会被执行,