第8章 异常处理
本章要点:
? 异常处理的基本概念
? try…catch…finally结构
? C#中的异常类
? 用户自定义异常
8.1 循序渐进学理论
8.1.1 异常处理概念
【例8-1】 编写一个除法计算器,计算器的设计界面如图8-1所示。程序运行时,输入被除数和除数后按【计算】按钮将会把运算结果显示在【结果】后面的文本框中,如图8-2所示。要求程序能够识别出除数为零的错误并给出提示信息,如图8-3所示。
8.1.2 捕获处理异常
[格式]:
try
{
语句组1; //程序中需要执行的语句
}
catch(异常1) //发生了“异常1”指定的异常
{
语句组2; //执行该异常处理
}
……
catch(异常n) //发生了“异常n”指定的异常
{
语句组n; //执行该异常处理
}
finally //必做的自理
{
语句组n+1; //该语句块一定被执行,无论是否产生异常
}
【例8-2】 对例8-1进行改造使之能够捕获到除数为零的异常(只对整数产生,对于实数结果为无穷大)、输入数据格式不正确的异常以及其它所有异常。图8-4~图8-6是发生了几种异常情况时的程序运行界面。
8.1.3 C#的异常类
在C#中,所有的异常都派生于Exception类,该类包含在公共语言运行库中。该类有两个重要的属性,如下:
(1)Message属性:该属性是只读属性,包含对异常原因的描述信息。
(2)InnerException属性:该属性也是一个只读属性,它包含这个异常的“内部异常”。
8.1.4 抛出和重发异常
1.抛出异常
用户自己产生并抛出异常需要使用throw语句。
[格式1]:throw
[格式2]:throw 异常对象
【例8-3】 在“除法计算器”中对输入的除数进行判断,如果除数为0则主动抛出“除数为零”的异常。除数为“0”时的程序运行界面如图8-7所示。
2.重发异常
当发生异常后,可以在catch语句中对异常进行捕获,然后进行处理,处理过程还可以通过throw语句把异常重发给调用者。
【例8-4】 用函数实现除法计算器的功能。如果发现除数为零,则把结果默认为整数的最大值。同时程序显示出“执行结果不可靠”的提示信息。程序的运行界面如图8-8所示。
【例8-5】 对例8-4进行改进,使主调方法中能够显示出在被调方法中发生的异常是何种异常,发生异常时的程序运行界面如图8-9所示。
8.1.5 checked和unchecked运算符的用法
C#提供了checked和unchecked运算符,指定是否检查整
型算术运算的溢出。
checked运算符的格式如下。
[格式]:checked(整型算术表达式)
unchecked运算符的格式如下。
[格式]:unchecked(整型算术表达式)
注意:不但算术运算会产生溢出,整型数据类型之间的显式转换也会导致溢出。例如,将整数1 000 000从int转换为short会导致溢出,因为short类型的数值可以保存的最大值是32 767。
【例8-6】 编写一个整型加法计算器,如果运算结果超出了整数的表示范围则发生溢出异常并对之进行捕获。程序的设计界面如图8-10所示,程序的运行界面如图8-11所示。
资源来源:.net学习网
• 本地下载
打赏
扫码打赏,您说多少就多少