1
第 12章 异常处理
12.1 异常处理概述
12.2 常见的异常
12.3 异常处理的基本方法
12.4 用户自定义的异常
2
异常是一种封装了反常程序事件信息的对象,C#用异常来处理错误和反常情况。
当异常抛出时,当前函数的执行会停止,
堆栈展开,直到找到正确的异常处理代码,
异常处理代码就是处理异常的代码块。
如果异常得到处理,程序会解决问题并继续执行。即使程序不能继续执行,捕获异常也能使程序输出错误信息并安全地终止程序。
返回目录
3
在 C#中提供有很多的异常类,所有的异常类都是 System.Exception类型或是从其派生的类型。
表 12-1列出了 System命名空间中许多常见的异常类。
返回目录
4
12.3.1 try-catch语句
try块中包含可能会产生异常的语句。
catch从句捕捉并处理异常。
如果能确定在 try语句块中可能发生的异常类型,那么 catch语句可以捕捉相应的异常类型;
如果事先并不知道 try语句块中会引起哪一种异常,则在 catch语句中可以忽略异常的类型。
5
如果是多个异常,可以用多个 catch语句块:
try
{ //try语句块
}
catch(类型 1 参数 1)
{ //针对类型 1的异常处理
}
catch (类型 2 参数 2)
{ //针对类型 2的异常处理
}

catch (类型 n 参数 n)
{ //针对类型 n的异常处理
}
6
12.3.2 try-finally语句
如果程序更关心异常的清除而不是异常处理,
那么最好使用 try-finally语句。
该语句不仅抑制了异常信息,而且程序执行控制在任何情况下都会转换到 finally语句块,
即包含在 finally块中的所有代码都会被执行。
尽管程序不能正常终止,但在 finally块中可以为用户获取一些有用的异常信息。
7
12.3.3 try-catch-finally语句
应用程序对于错误最有可能的处理方法是合并前面两种异常处理技术 —— 捕获、处理异常以及清除异常并继续执行应用程序。故此在程序中需要联合使用 try-catch-finally语句,
它能为用户处理所有的异常。
8
12.3.4 throw语句
throw语句的作用是抛出一个异常,它的语法为:
throw 表达式;
throw语句的表达式是可选的。带有表达式的
throw语句将抛出一个计算该表达式之后得到的异常,但是该表达式的值必须是类
System.Exception类型,或是该类派生类的类型。
如果表达式的值为 null,那么将抛出一个
NullReferenceException异常。
返回目录
9
除了系统提供的异常外,用户还可以自定义异常。
要创建用户自定义的异常,必须首先声明它,声明的格式为:
class 自定义异常名,Exception { }
然后,在 catch语句块中创建自定义异常的处理方法,这一般只需一行代码即可。
再后,为了抛出自定义异常,需要使用关键字
throw。其格式为:
throw new 自定义异常名 ();
返回目录