第12章 异常处理_第1页
第12章 异常处理_第2页
第12章 异常处理_第3页
第12章 异常处理_第4页
第12章 异常处理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#程序设计案例教程程序设计案例教程第第12章章 异常处理异常处理 第第12章章 异常处理异常处理 学习目标学习目标掌握异常的定义和处理。掌握异常的定义和处理。熟悉自定义异常的定义。熟悉自定义异常的定义。第第12章章 异常处理异常处理 12.1 异常异常【课堂案例课堂案例12-1】执行下面的程序将出现异常执行下面的程序将出现异常,请用异常处理请用异常处理机制修改程序。机制修改程序。Class ArrayOutOfIndex public void calculateSum() int sum = 0; int count ; int number = new int51,2,3,4,5; fo

2、r(count=1;count=5;count+) sum+=numbercount; Console.WriteLine(“The sum of the array is :0”,sum); Class Program static void Main(string args) ArrayOutOfIndex obj = new ArrayOutOfIndex(); obj.calculateSum(); 第第12章章 异常处理异常处理 课堂案例12-1运行时出现的异常第第12章章 异常处理异常处理 【案例学习目标案例学习目标】掌握异常的概念。掌握异常的概念。掌握异常的处理机制。掌握异常的处

3、理机制。【案例知识要点案例知识要点】异常的概念与处理机制。异常的概念与处理机制。【案例完成步骤案例完成步骤】(1)初步认识异常。)初步认识异常。(2)使用异常的处理机制。)使用异常的处理机制。(3)修改应用程序。)修改应用程序。第第12章章 异常处理异常处理 12.1.1 初步初步认识异常认识异常下面通过一段简单代码来认识异常。class Program static void Main(string args) int a,b,c; a=2; b=0; c=a/b; 按Ctrl+F5组合键执行上述程序时,会弹出一个对话框,提示程序在执行过程中碰到问题,出现的对话框如下图所示:第第12章章 异

4、常处理异常处理 出现上述情况是因为程序遇到了异常,产生的异常类为System.DivideByZeroException,出现异常的原因是因为除数为0。异常是程序在执行期间发生的错误情况。当程序发生异常时,系统就会抛出一个错误。异常类是对异常的分类。它们是由System.Exception类派生出来的,关于异常类的层次结构如下图所示:System.ExceptionSystem.ApplicationExceptionSystem.SystemException第第12章章 异常处理异常处理 System.ApplicationException和System.SystemException是

5、System.Exception的直接子类,System.ApplicationException类是用户类型异常,如果用户想在程序中定义自己的异常,将要定义从该异常类继承的异常。System.SystemException是所有预定义系统异常的基类。一些派生自System.SystemException类的常用基类如下表所示:类类说明说明System.IO.IOException发生发生I/O错误时引发的异常错误时引发的异常System.IndexOutOfRangeException试图访问索引超出数组界限的数组试图访问索引超出数组界限的数组元素时引发的异常。无法继承此类元素时引发的异常。

6、无法继承此类System.NullReferenceException尝试取消引用空对象引用时引发的尝试取消引用空对象引用时引发的异常异常System.OutOfMemoryException没有足够的内存继续执行程序时引没有足够的内存继续执行程序时引发的异常发的异常第第12章章 异常处理异常处理 l 程序错误的分类根据错误出现的阶段,通常可以将程序错误分为如下三种:编译时错误、结果错误和运行时错误。(1)编译时错误:这种错误是发生在程序编写过程中,是指程序语法编写上出现的错误。(2)结果错误:结果错误指的是程序本身没有语法上的错误(即无编译错误),在程序运行期间也没有出现类似上图的错误提示。

7、但程序执行后得到的结果并不正确。这是由于程序设计思路上存在的缺陷,是程序算法在实现功能时出现的逻辑上的问题。(3)运行时错误:是指编译已通过,运行时发生的错误。运行时错误时由于与用户交互或对外设或网络的访问等可变情况,程序设计时考虑欠周全而导致的。第第12章章 异常处理异常处理 12.1.2 异常异常的处理机制的处理机制在C#中是通过try、catch和finally块来实现异常处理的。1. try程序块用户需要将可能导致异常的语句放入try程序块中。try程序块的使用方法如下:try /可能导致异常的语句try程序块管理放入其中的语句,并定义相关的异常处理程序的范围。换句话说,如果异常发生在

8、try程序块内,与try程序块相关的异常处理程序将处理该异常。ty程序块必须紧跟至少一个catch程序块。第第12章章 异常处理异常处理 2. catch程序块通过在try程序块后紧跟一个或多个catch处理程序可以将异常处理程序和try程序块关联起来。下列代码框架说明了catch程序块的使用。try /可能导致异常的语句catch() /异常处理代码catch语句将异常类的对象作为参数。如果异常发生了,就执行catch程序块中的语句。catch程序块的处理范围仅限于先前try程序块中的相关语句。第第12章章 异常处理异常处理 3. finally程序块finally用于执行不论异常是否被抛出

9、都会被执行的一个语句块。例如,在实现文件操作的过程中不管有没有异常,文件必须被关闭,文件被关闭的操作可放置在finally块中。try /可能导致异常的语句catch() /异常处理代码finally /最后的执行代码finally程序块跟在catch程序块后面。对于一个异常处理程序,只能有一个finally程序块。但是,并不是一定要使用finally程序块。第第12章章 异常处理异常处理 对于课堂案例12-1,要处理程序运行过程中出现的System.OutOfMemoryException异常,需要使用trycatch程序块。处理代码如下:try /捕获异常 for(count=1;coun

10、t=5;count+) sum += numbercount; Console.WriteLine(“The sum of the array is :0”,sum);catch(IndexOutOfRangeException e) Console.WriteLine(e.Message);说明:说明:(1)在)在trycatch结构中,结构中,catch语句块可以有多个,读者可以根据情况而定,但至少要有一个语句块可以有多个,读者可以根据情况而定,但至少要有一个catch语句块。语句块。(2)catch语句,按异常类型从深层派生异常类型到异常基类型(从特殊到一般)的顺序排列。若颠倒顺序则语句

11、,按异常类型从深层派生异常类型到异常基类型(从特殊到一般)的顺序排列。若颠倒顺序则参数为异常基类类型的参数为异常基类类型的catch语句将截获所有语句将截获所有try语句抛出的异常对象。语句抛出的异常对象。(3)在)在C#中处理异常时,当不能明确系统异常时,可以直接使用中处理异常时,当不能明确系统异常时,可以直接使用System.Exception类。类。第第12章章 异常处理异常处理 12.1.3 修改应用程序修改应用程序 对对课堂案例课堂案例12-1的错误程序进行异常处理后的完整代码的错误程序进行异常处理后的完整代码如下:如下:Class ArrayOutOfIndex public vo

12、id calculateSum() int sum=0; int count; int number =new int5 1,2,3,4,5; try /捕获异常 for(count=1;count=5;count+) sum += numbercount; Console.WriteLine(“The sum of the array is : 0”,sum); catch(IndexOutOfRangeException e) Console.WriteLine(e.Message); Class Program static void Main(string args) ArrayOut

13、OfIndex obj = new ArrayOutOfIndex(); obj.calculateSum(); 第第12章章 异常处理异常处理 课堂实践课堂实践12-1修改下面的程序,使程序能够正常结束。修改下面的程序,使程序能够正常结束。using System;class ExceptionExam public static void Main() int nums1 = 22,23,24,25,26; int nums2 = 2,0,4,0; for(int i=0;inums1.Length;i+) Console.WriteLine(nums1i/nums2); 第第12章章 异

14、常处理异常处理 12.2 自定义异常自定义异常【课堂案例课堂案例12-2】阅读下面的程序,识别用到的异常并预测程序的输阅读下面的程序,识别用到的异常并预测程序的输出结果。出结果。/定义用户自定义异常定义用户自定义异常Public class CountIsZeroException:ApplicationException public CountIsZeroException (string message):base(message) Public class Calculate int sum; int count; int average; public int Sum get ret

15、urn sum; set sum=value; public int Count get return count; set count =value; public void doAverage() if(0=count) throw(new CountIsZeroException(“除数是除数是0”); else average=sum/count; 第第12章章 异常处理异常处理 Class Program static void Main(string args) Calculate obj = new Calculate(); try obj.Sum=0; obj.Count=0;

16、 obj.doAverage(); catch(CountIsZeroException e) Console.WriteLine(“CountIsZeroException:0”,e.Message); 第第12章章 异常处理异常处理 【案例学习目标案例学习目标】掌握自定义异常的使用。掌握自定义异常的使用。【案例知识要点案例知识要点】自定义异常。自定义异常。【案例完成步骤案例完成步骤】(1)初步认识用户自定义异常。)初步认识用户自定义异常。(2)预测程序的输出结果。)预测程序的输出结果。第第12章章 异常处理异常处理 12.2.1 初次初次认识用户自定义异常类认识用户自定义异常类 1.定义用

17、户自定义异常定义用户自定义异常.NET框架为程序人员提供了大量的预定义异常类,一些常见错误引发的异常都能被预定义的异常类捕捉。然后,在实际的程序设计过程中,编程人员可能需要根据程序运行的具体情况,人为地创建自己的异常类来处理某些特殊状况,这种类型的异常称为自定义异常。自定义异常类派生自ApplicationException类。要创建用户自定义的异常,必须首先声明它,声明的格式为: class 自定义异常名:ApplicationException 第第12章章 异常处理异常处理 例如:声明一个自定义异常MyException:Class MyException:ApplicationExce

18、ption /自定义异常通常继承 ApplicationException异常类 public MyException() : base() public MyException(string e) : base(e) public MyException(string e,Exception inner) : base(e,inner) 第第12章章 异常处理异常处理 2.抛出异常抛出异常在完成自定义异常类定义的基础上,我们需要进一步明确在程序运行到何处时,适时地抛出异常对象。在C#中使用throw关键字实现抛出异常的处理机制,称为“自定义异常处理机制”。具体的使用格式如下:throw 表达式;例如,抛出上面定义

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论