《Illustrated C# 2012, 4th Edition》Daniel M. Solis 第22章 异常 笔记
try...catch语句的结构:
BCL定义了许多异常类,每个类对应一种异常,异常类的对象只包含只读属性:
catch子句有三种形式:
catch子句可以包含多个,当异常发生时,从上到下搜索第一个匹配的catch子句并执行。
因此catch子句有两个排序原则:
- 派生类应排在基类之前。
- 一般catch子句应排在末尾,并且只存在一个。
无论是否发生异常finally块都会执行。
即使try块中包含return语句,finally块也会执行:
如果发生异常时,所处try块没有匹配的catch子句捕获异常,会沿调用栈向栈底搜索,尽可能找到一个能捕获异常的try...catch语句:
沿调用栈,找到一个的try...catch语句,不执行,当栈不断弹出,直到try...catch语句所处的帧栈时执行:
throw语句可以显式抛出一个异常:
throw ExceptionObject;
在catch子句中,throw语句还可以不带异常对象,将这个catch子句捕获的异常再次抛出,语法如下:
throw;