第12章异常处理 121异常处理概述 1122常见的异常 123异常处理的基本方法 124用户自定义的异常
1 第12章 异常处理 12.1 异常处理概述 12.2 常见的异常 12.3 异常处理的基本方法 12.4 用户自定义的异常
异常是一种封装了反常程序事件信息的对 象,C#用异常来处理错误和反常情况。 令当异常抛出时,当前函数的执行会停止, 堆栈展开,直到找到正确的异常处理代码, 异常处理代码就是处理异常的代码块 令如果异常得到处理,程序会解决问题并继 续执行。即使程序不能继续执行,捕获异 常也能使程序输出错误信息并安全地终止 程序。 目录
2 ❖ 异常是一种封装了反常程序事件信息的对 象,C#用异常来处理错误和反常情况。 ❖ 当异常抛出时,当前函数的执行会停止, 堆栈展开,直到找到正确的异常处理代码, 异常处理代码就是处理异常的代码块。 ❖ 如果异常得到处理,程序会解决问题并继 续执行。即使程序不能继续执行,捕获异 常也能使程序输出错误信息并安全地终止 程序。 返回目录
在C#中提供有很多的异常类,所有的异常类 都是 System EXception类型或是从其派生的 类型 冷表12-1列出了 System命名空间中许多常见的 异常类。 返回目录
3 ❖ 在C#中提供有很多的异常类,所有的异常类 都是System.Exception类型或是从其派生的 类型。 ❖ 表12-1列出了System命名空间中许多常见的 异常类。 返回目录
12.3.1try- catch语句 冷ty块中包含可能会产生异常的语句。 catch从句捕捉并处理异常 冷如果能确定在try语句块中可能发生的异常类 型,那么 catch语句可以捕捉相应的异常类型 如果事先并不知道ty语句块中会引起哪一种 异常,则在 catch语句中可以忽略异常的类型
4 12.3.1 try-catch语句 ❖ try块中包含可能会产生异常的语句。 ❖ catch从句捕捉并处理异常。 ❖ 如果能确定在try语句块中可能发生的异常类 型,那么catch语句可以捕捉相应的异常类型; 如果事先并不知道try语句块中会引起哪一种 异常,则在catch语句中可以忽略异常的类型
今如果是多个异常,可以用多个 catch语句块 /tny语句块 catch(类型1参数1) /针对类型1的异常处理 catch(类型2参数2) ∥针对类型2的异常处理 catch(类型n参数n) 对类型n的异常处理
5 ❖ 如果是多个异常,可以用多个catch语句块: try { //try语句块 } catch(类型1 参数1) { //针对类型1的异常处理 } catch (类型2 参数2) { //针对类型2的异常处理 } … catch (类型n 参数n) { //针对类型n的异常处理 }
1232try-fna!y语句 令如果程序更关心异常的清除而不是异常处理, 那么最好使用try-fna!语句 令该语句不仅抑制了异常信息,而且程序执 控制在任何情况下都会转换到fnay语句块, 即包含在fnay块中的所有代码都会被执行。 冷尽管程序不能正常终止,但在 finally块中可以 为用户获取一些有用的异常信息
6 12.3.2 try-finally语句 ❖ 如果程序更关心异常的清除而不是异常处理, 那么最好使用try-finally语句。 ❖ 该语句不仅抑制了异常信息,而且程序执行 控制在任何情况下都会转换到finally语句块, 即包含在finally块中的所有代码都会被执行。 ❖ 尽管程序不能正常终止,但在finally块中可以 为用户获取一些有用的异常信息
123.3try- catch- finally语句 应用程序对于错误最有可能的处理方法是合 并前面两种异常处理技术——一捕获、处理异 常以及清除异常并继续执行应用程序。故此 在程序中需要联合使用ty- catch- - finally语句, 它能为用户处理所有的异常
7 12.3.3 try-catch-finally语句 ❖ 应用程序对于错误最有可能的处理方法是合 并前面两种异常处理技术——捕获、处理异 常以及清除异常并继续执行应用程序。故此 在程序中需要联合使用try-catch-finally语句, 它能为用户处理所有的异常
12.34 throw语句 throw语句的作用是抛出一个异常,它的语法为 throw表达式; throw语句的表达式是可选的。带有表达式的 throw语句将抛出一个计算该表达式之后得到的 异常,但是该表达式的值必须是类 System. EXception类型,或是该类派生类的类 型。 如果表达式的值为nu,那么将抛出一个 Nu| ReferenceEXception异常。 8 返回目录
8 12.3.4 throw语句 ❖ throw语句的作用是抛出一个异常,它的语法为: throw 表达式; ❖ throw语句的表达式是可选的。带有表达式的 throw语句将抛出一个计算该表达式之后得到的 异常,但是该表达式的值必须是类 System.Exception类型,或是该类派生类的类 型。 ❖ 如果表达式的值为null,那么将抛出一个 NullReferenceException异常。 返回目录
除了系统提供的异常外,用户还可以自定义异常 要创建用户自定义的异常,必须首先声明它,声 明的格式为: class自定义异常名: EXception{ 然后,在 catch语句块中创建自定义异常的处理 方法,这一般只需一行代码即可 令再后,为了抛出自定义异常,需要使用关键字 thow。其格式为: throw new自定义异常名0; 目录
9 ❖ 除了系统提供的异常外,用户还可以自定义异常。 ❖ 要创建用户自定义的异常,必须首先声明它,声 明的格式为: class 自定义异常名: Exception { } ❖ 然后,在catch语句块中创建自定义异常的处理 方法,这一般只需一行代码即可。 ❖ 再后,为了抛出自定义异常,需要使用关键字 throw。其格式为: throw new 自定义异常名(); 返回目录