异常与异常处理机制
• 异常是指程序运行期间产生的错误。异常会导致运行程序提前终止。
• 异常处理机制是用于处理异常的一种结构化方法。
基本思想是将异常的检测与处理分离。
当在一个函数体中检到异常条件 存在,但无法确定相应的处理方法时,将引发一个异常,并由函数的直 接或间接调用者检测并处理这个异常。
没有进行异常处理的程序
try语句
try语句提供了捕获异常的机制。
有三种使用的格式:
(1)try后跟一个或多个catch块语句。
(2)try后跟一个finally块语句。
(3)try后跟一个或多个catch块语句和一个finally块语句。
使用try-catch捕捉和处理异常
try-catch语句的执行过程:
• 当try块中有异常发生时,程序先创建一个包含异常信息的异常对象, 然后从前到后依次搜索是否有与该异常对象匹配的catch代码块,找到 匹配的代码块,就会执行该catch块中的语句,实现异常处理。
• 如果未发生异常,则跳过catch子句,继续执行try-catch之后的语句。
添加捕捉和处理异常的功能
说明:
1. catch语句中异常类型,必须是System.Exception或其派生类。
2. catch中可以不指定异常类型和异常对象名,表示捕获所有的异常类型。
其格式为:catch{… …},必须是try块中最后一条catch语句。
3. try和catch后面的一对花括号“{}”是必须的,即使代码块中只有一条 语句。
4. catch语句中同时指定异常类型和异常对象时,该对象代表当前正在被 处理的异常,可以在catch语句块内部使用。
5. try语句中可以有多个catch块,从前向后进行搜索匹配。
. NET 的Exception 层次
Exception类是所有异常类的基类。
每个异常必须用一个Exception类或其派 生类的实例表示。
例如: DivideByZeroException和FormatException都是Exception类的派生类。
Exception类中有一个只读属性Message,该属性用来描述出现异常的信息
使用基类异常捕获相关异常类型层次中的异常,使其可以显示异 常的信息说明。
finally 语句块
• 在try-catch语句中,只有捕获到异常后,才会执行catch语句中的代码。还有一些特 殊的操作,无论是否发生异常都必须执行,这时可以用finally语句块定义,将执行的 代码放在finally块中。
• Finally语句常常与try-catch语句配合使用,try-catch-finally结构格式如下:
编写使用finally语句块的异常处理程序
程序功能:打开一个文本文件,读出该文件的内容,并显示到屏幕上。不论文件是否存 在,都要执行文件的关闭操作。
throw语句
使用throw语句可以主动抛出异常。
throw语句的格式如下:
• 省略异常对象时,该语句只能用在catch语句中,用于再次引发异常处理。
• 带有异常对象时,则抛出指定的异常类。该异常既可以是预定义的异常类, 也可以是自定义的异常类。
• 通过throw抛出异常,使用catch语句捕获。
使用throw语句抛出异常,处理使用数组时下标出界的错误
程序功能:打开一个文本文件,读出该文件的内容,并显示到屏幕上。不论文件是否存 在,都要执行文件的关闭操作。
用户定义异常类
用户定义异常类需直接或间接继承Exception类。
例10-6 创建用户自定义类-NegativeNumberException, 用来处理对负数进行计算平方根运算时产生的异常
创建用户自定义类