C#面向对象编程(五)异常处理_第1页
C#面向对象编程(五)异常处理_第2页
C#面向对象编程(五)异常处理_第3页
C#面向对象编程(五)异常处理_第4页
C#面向对象编程(五)异常处理_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

C#面向对象编程(五)

异常处理

berry博客:

5.7异常处理

异常就是程序运行中发生的错误,程序如果发生异常,我们可以进行异常处理。

C#采用面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法自动生成代表该异常的一个对象,并把它交给系统,系统寻找相应的代码来处理这个异常。生成异常对象并把它交给系统的过程称为抛出异常。系统在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到包含异常处理的方法为止,这个过程称为捕获一个异常。5.7.1异常的概念和处理方式在C#中,每个异常类都代表了一种运行错误,类中包含了该错误的信息和处理错误的方法等内容。所有的异常都表现为一个类的实例,这个类为System.Exception。Exception类有自己的方法和属性。常用的构造方法有两个:publicException();publicException(strings);//该方法可以接受信息,以对异常所对应的错误进行描述。Exception类还有两个属性:Message:描述错误的可读文本,可以在创建异常时传递给构造方法,如果没有则将使用默认错误信息。StackTrace:发生异常时调用堆栈的状态,包括错误发生位置的堆栈跟踪、所有调用的方法和源文件中这些调用所在的行号。系统定义的经常用到的异常System.OutOfMemoryException用new分配内存失败System.StackOverflowException递归过多过深System.NullReferenceException对象为空Syetem.IndexOutOfRangeException数组边界超出System.ArithmaticException算术操作异常的基类System.DivideByZeroException除零错System.OverflowException溢出错误System.ArrayTypeMismatchException数组类型不匹配5.7.2

对异常进行处理—throw、try、catch、finally1、throw语句

throw语句用于抛出异常,即发出在程序执行期间出现异常的信号,格式为throw(异常对象)。usingSystem;publicclassTest{publicstaticvoidMain(){strings1=null;if(s1==null){throw(newArgumentNullException());}}}throw语句一般放在if语句中,只有当条件得到满足(用户自己定义的错误发生)才执行.异常必须是Exception及其子类.2、try-catch语句:

当try中的语句产生异常时,系统在catch子句中进行查找,看抛出的异常是否和哪个子句的异常的对象类型相同(或是派生类),如果找到了就执行该子句中的语句;如果没找到就产生一个未处理的异常错误,则运行时系统将终止。一般格式try{被测试语句;}catch(异常对象声明1){异常处理语句;}catch(异常对象声明2){异常处理语句;}……usingSystem;classMyclass{publicstaticvoidMain(){Myclassx=newMyclass();try{strings=null;x.Test(s);}catch(Exceptione)/*参数可省略直接写成catch,表示捕获任何异常*/{Console.WriteLine(“{0}被捕获”,e);}stringstr=Console.ReadLine();}publicvoidTest(strings){if(s==null)throw(newArgumentNullException());}}3、finally语句:为异常提供一个统一的出口,不论try语句块及catch语句块中是否发生了异常,也不论出现任何语句(即使有return或throw),finally子句都会被执行。Finally经常用于对资源做清理工作如关闭文件等,finally中不允许出现return。usingSystem;PublicclassTest{publicstaticvoidMain(){inti=27;strings=“susan”;objecto=s;try{i=(int)o;//非法类型转换}finally{Console.WriteLine(“{0}”,i);}}}try后面至少有一个catch或finally.异常举例1.publicclassTest{publicstaticvoidMain(){string[]friends={“lisa”,”peter”,”tom”};try{for(inti=0;i<=5;i++)Console.WriteLine(“{0}”,friends[i]);}catch(IndexOutOfRangeExceptione)Console.WriteLine(e.Message);Console.WriteLine(“theend”);}}异常举例2.publicclassTest{publicstaticvoidMain(){inta=0;try{a=int.Parse(“2”);a/=(a-a);}catch(ArithmeticExceptionea){Console.WriteLine(“ea”+ea);}finally{Console.WriteLine(“theend”);}}}5.7.3用户自定义异常类用户要完成的工作:1、声明一个新的异常类,以ApplicationException类或其他某个已经存在的异常类为父类;2、为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能体现该类所对应的错误信息。usingSystem;ClassMyException:ApplicationException{privateintidnumber;publicMyException(stringmessage,intid):base(stringmessage){this.idnumber=id;}publicintgetId(){returnidnumber;}}publicclassTest{publicstaticvoidregist(intnum){if(num<0){Console.WriteLine(“登记号码“+num);throw(newMyException(“号码为负值,不合理”,3);}}publicstaticvoidmanager(){try{regist(-100);}catch(MyExceptione){Console.WriteLine(“登记失败”+e.getId());}Console.WriteLine(“本次登记操作结束”);}publicstaticvoidMain(){Test.manager();}}5.7.4算术溢出及检查C#可以对溢出进行处理。C#默认不进行溢出检查,为了要进行溢出检查,在程序中使用关键字checked及unchecked,它们可以针对一个表达式或一个语句块中所有表达式。针对表达式:checked(表达式)针对语句块:checked{……}在程序运行时,如果在checked上下文中发生了溢出,系统会抛出System.OverflowException异常,程序可以对该异常进行捕获;如果是unchecked,则不会异常,但结果会被截断.usingSystem;publicclassOvertest{publicstaticvoidMain(){intf=1;strings;inti,n;s=Console.ReadLine();n=Int32.Parse(s);for(i=1;i<n;i++)checked{f*=i;}stringstr=Console.ReadLine();}}例3.publicclassTest{publicstaticvoidMain(){bytea,b,result;a=255;b=3;try{unchecked{result=(byte)(a+b);

温馨提示

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

评论

0/150

提交评论