编程语言
884
注意 ⚠️,必须在更一般的异常捕获之前为比较特殊的异常提供 catch
块。如果 catch
块的顺序有误,应用程序就会编译失败。还要注意可以在 catch
块中抛出异常,方法是使用上一个示例中的方式,或使用下述表达式:
throw;
这个表达式会再次抛出 catch
块处理过的异常。如果以这种方式抛出异常,该异常就不会由当前的 try...catch...finally
块处理,而是由上一级的代码处理(但嵌套结构中的 finally
块仍会执行)。
例如,如果修改 ThrowException()
中的 try...catch...finally
块,如下所示:
try { Console.WriteLine("ThrowException(\"nested index\")" + "try block reached."); Console.WriteLine("ThrowException(\"index\") called."); ThrowException("index"); } catch { Console.WriteLine("ThrowException(\"nested index\") general" + " catch block reached."); throw; } finally { Console.WriteLine("ThrowException(\"nested index\") finally" + "block reached."); }
则首先执行其中的 finally
块,再执行 Main()
中匹配的 catch
块,得到的控制台输出 如图 7 - 20 所示
。
-
图 7 - 20
*
在这个屏幕截图中,Main()
函数输出了额外的几行,因为这个函数捕获了 System.IndexOutOfRangeException
异常。