版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 结构化的异常处理,内容摘要,程序员在编写程序时,不仅要关心程序应达到的目的,也应该考虑到可能发生的各类不可预期的事件。例如,用户错误的输入、内存不够、磁盘出错、网络资源不可用或者数据库无法使用等等。通常这些问题的解决方法是在程序中使用异常进行处理。C#为处理程序执行期间可能出现的异常情况提供了内置支持,这些异常将由正常控制流之外的代码处理。C#中由try、throw、catch和finally关键字实现异常处理,而且提供了一个处理系统级和应用程序级错误状态的结构化的、统一的和类型安全的方法。此外,除了C#中提供的异常类型,C#还支持自定义的异常类型。,学习目标,掌握如何抛出和捕获异常
2、掌握内部异常类 理解如何抛出预定义异常 掌握System.Exception类的成员 掌握如何创建和使用用户自定义的异常类,异常是程序执行时遇到的任何错误情况或意外行为。例如,代码或调用的代码(共享库)中的错误,操作系统资源不可用,通用语言运行时遇到意外情况(无法验证代码)等。 C#的异常由try语句处理,发生异常时系统将搜索可以处理该异常最近的catch子句,而这由异常运行时的类型来确定。 运行时使用基于异常对象和受保护代码块的异常处理模型。发生异常时,创建一个Exception对象来表示该异常。,7.1 结构化异常处理的基本知识,NET Framework提供了大量处理异常的预定义基类对象
3、。将可能引发异常的代码段放在try块中,而将处理异常的代码放在catch块中。catch块是一系列以关键字catch开头的语句,语句后跟异常类型和要执行的操作。finally块包含代码清理资源或执行要在try块或catch块末尾执行的其他操作。无论是否产生异常,都会执行finally块,因为finally块包含了应总是执行的清理代码。finally块是可选的。如果不需要清理代码,就不需要包含此块。,7.1.1 抛出和捕获异常,抛出和捕获异常是由try/catch块来完成的,它是C#异常处理的主要机制。try/catch块的基本语法如下所示: try /有可能产生异常的代码 catch(Exce
4、ption e) /对异常进行处理的代码 finally /最终将执行的代码 ,7.1.1 抛出和捕获异常,在上述基本语法中,catch块可以指定要捕捉的异常类型。这个类型称为“异常筛选器”,它必须是Exception类型,或者必须从此类型派生。应用程序定义的异常应当从ApplicationException派生。另外,具有不同异常筛选器的多个catch块可以串联在一起。多个catch块的计算顺序是从顶部到底部,但是,对于所引发的每个异常,都只执行一个catch块。也就是与所引发异常的准确类型或其基类最为匹配的第一个catch块将被执行。如果在try块中程序流检测一个错误,程序流执行完相应的c
5、atch块后会执行finally块。如果没有任何异常仍会执行finally块。,7.1.1 抛出和捕获异常,如果检测到一个错误,代码就执行一定的操作,称为“抛出一个异常”。换句话说,它实例化一个异常对象,并抛出这个异常。代码如下所示: throw new IndexOutOfRangeException ();,7.1.1 抛出和捕获异常,在C#中,当出现某个异常错误条件时,就会创建一个异常对象。这个对象包含有助于跟踪问题的信息。在.NET框架中,异常是从Exception类继承的对象。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。Microsoft在.NET
6、 Framework中提供了大量的异常类。下图7-1所示的类结构图显示了其中的一些类,给出了大致的模式。,7.2 异常类,图7-1 异常基类结构图,7.2 异常类,这个图中的所有类都在System命名空间中,但IOException和派生于IOException的类除外,它们在System.IO命名空间中,这个命名空间处理文件数据的读写。一般情况下,异常没有特定的命名空间,异常类应放在生成异常的类所在的命名空间中,因此与IO相关的异常就在System.IO命名空间中。许多基类命名空间中都有异常类。,7.2 异常类,在C#中,发生异常时,异常沿堆栈向上传递,每个catch块都有机会处理它,cat
7、ch语句的顺序很重要。将针对特定异常的catch块放在常规异常catch块的前面,否则编译器可能会发出错误。确定正确catch块的方法是将异常的类型与catch块中指定的异常名称进行匹配。如果没有特定的catch块,则由可能存在的常规catch块捕捉异常。 要想捕获某一个被抛出的异常,只有该异常的类型与某个catch语句中指定的异常类型相匹配时,才会执行这个catch语句。基于类型筛选的异常处理程序指定仅捕捉特定类型的异常,从而可以使用户更加详细地获得指定异常的信息。,7.2.1 基于类型的筛选异常,System.Exception类是其他异常类的基类。它有两个直接派生类:Applicatio
8、nException和SystemException。当错误发生时,例如出现了数组越界错误,程序运行时环境就会抛出SystemExcetipn类的适当派生类。而ApplicationException类是由用户程序抛出,而不是由运行时环境抛出。用户所有的自定义异常类都应是ApplicationExcepton类的派生类。下面表7-1、7-2、7-3分别为Exception类所用到的属性、方法和构造函数。,7.2.2 SYSTEM.EXCEPTION类的成员,表7-1 Exception类属性,7.2.2 SYSTEM.EXCEPTION类的成员,表7-2 Exception类方法,7.2.2
9、SYSTEM.EXCEPTION类的成员,表7-3 Exception类构造函数,7.2.2 SYSTEM.EXCEPTION类的成员,在Exception类的属性中,如果可以进行堆栈跟踪,StackTrace和TargetSite是由.NET运行时自动提供的。Source总是由.NET运行时提供为产生异常的程序集名称(但可以在代码中修改该属性,提供更专门的信息),Data、Message、HelpLink和InnerException必须由抛出异常的代码提供,其方法是在抛出异常前设置这些属性。,7.2.2 SYSTEM.EXCEPTION类的成员,在.NET Framework中,异常是从Exception类继承的对象。System.Exception异常类派生于System.Object,通常情况下不在代码中抛出这个System.Exception对象,因为它无法确定错误情况的本质。但用户可以使用派生于System.Exception类的异常类对象来更明确表示异常。内部异常也称为预定义异常,它是.NET中使用的内部异常类的对象。,7.2.3 内部异常,在.NET Framework中,它提供的内部异常类已经能够处理很多异常,但是在有些时候内部异常类不能很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育三至四年级第六节 呼吸道传染病的预防教案设计
- 电化学耦合光学技术赋能纳米生物传感移动检测的创新探索
- 高中学术探究说课稿2025科学实验
- KTV娱乐体验评价手册
- 电动汽车充电基础设施投资价值与分时租赁模式协同发展研究
- 网络安全我在行(教学设计)2025-2026学年初三下学期教育主题班会
- 电力北斗高精度接收机测试与评估体系的深度剖析与构建
- 甲醇柴油混合燃料在柴油机中的应用与性能优化研究
- 湖工院材料物理化学教案第5章 胶体
- 2025-2030年中国起重设备行业前景趋势预测及发展战略咨询报告
- 大学生防诈骗安全教育宣讲
- 高中化学实验操作考试试题
- 国开计算机组网技术实训1:组建小型局域网
- 高中化学化学能与电能课件人教版必修二
- 招投标结果申诉函
- 足球-脚内侧接踢地滚球 课件
- 用excel绘制热网水压图
- 宝鸡某烟厂联合厂房施工组织设计
- GB/T 8416-2003视觉信号表面色
- 学校课程方案形成和学生选课指导课件
- 采面作业规程
评论
0/150
提交评论