欢迎来到天天文库
浏览记录
ID:57045703
大小:515.00 KB
页数:18页
时间:2020-07-28
《PPT 讲稿文字规范.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章异常处理王德俊上海交通大学继续教育学院第5章异常处理5.1异常处理模型5.2.NET的Exception层次、属性5.3异常的抛出及用户自定义异常一个产生异常的简单程序创建控制台应用程序ExceptionPro,该程序能够捕获产生的异常,并进行相应的处理:staticvoidMain(string[]args){intn,m;strings=Console.ReadLine();n=0;try{m=Convert.ToInt16(s);//产生异常的语句Console.WriteLine("m={0}",m
2、);}catch(Exceptione)//捕获异常{Console.WriteLine("产生异常:{0}",e.Message);//处理异常}Console.ReadKey();}试图将“123ab4”转换为整数时产生了异常产生该异常时自动转向执行该语句5.1异常处理模型5.1.1异常的概念5.1.2try-catch结构5.1.3try-catch-catch结构5.1.4try-catch-finally结构所谓异常,它是指程序在运行过程(而非编译过程)中产生的错误编译过程中的错误可以通过代码调试来避免
3、,异常一般是不能避免的(只能是减少)异常处理统一了错误处理机制,使程序具有较强的错误处理能力,使得程序更加健壮和稳定;有助于从事大型项目开发的程序员理解其他程序员编写的错误处理代码。5.1异常处理模型5.1.1异常的概念try-catch结构如下:try{//可能产生异常的代码}catch[(异常类对象名)]{//处理异常的代码}5.1异常处理模型5.1.2try-catch结构try-catch结构一旦在try块中有某一条语句执行时产生异常,程序立即转向执行catch块中的代码,而不会再执行该语句后面的其他语句
4、。如果try块中的语句都不产生异常,那么就不会有任何的catch块被执行。“(异常类对象名)”部分可以省略。如果省略,则不管在try块中产生什么异常,程序都会转向执行catch块中的代码,而我们将无法获取此异常的任何信息。“异常类”用于决定要捕获的异常的类型,不同的异常类能捕获和处理不同的异常常用的异常类如表5.1所示【例5.1】内存溢出异常的捕获和处理。在申请较大块的存储空间时可能出现失败,这时会产生一个内存溢出的异常(OutOfMemoryException)。在下面的OutOfMemExc_Exa程序中,申
5、请了20000*30000个存储单元,结果超出了笔者机器的可用内存空间,因而产生了内存溢出异常。staticvoidMain(string[]args){try{int[,]a=newint[20000,30000];//申请存储空间}catch(OutOfMemoryExceptione)//异常捕获与处理{Console.WriteLine("产生异常:{0}",e.Message);}Console.ReadKey();}当出现多个不同的异常时,需要用到带多个catch块的try-catch-catch结构
6、。5.1异常处理模型5.1.3try-catch-catch结构【例5.2】多个异常的捕获和处理。程序中,try结构包含的两条语句在执行时都会产生异常,分别为DivideByZeroException异常和OutOfMemoryException异常。这两个异常分别由两个catch结构来捕获和处理。staticvoidMain(string[]args){intn,m;n=30000;m=30000;try{n=1/(n-m);int[,]a=newint[n,n];}catch(OutOfMemoryExcep
7、tione1){Console.WriteLine("内存溢出异常:{0}",e1.Message);}catch(DivideByZeroExceptione2){Console.WriteLine("零除异常:{0}",e2.Message);}}由于DivideByZeroException异常先发生,故转向执行第二个catch块,第一个catch块没有被执行。多个catch块的顺序问题:catch后面的异常类之间没有继承关系(如DivideByZeroException和System.OutOfMemor
8、yException),这时catch块的位置不分先后。catch后面的异常类之间存在继承关系(如DivideByZeroException类继承了ArithmeticException类、所有异常类都继承了Exception类),这时派生类所在的catch块必须放在基类所在的catch块的前面。即作用范围小的catch块放在前面,作用范围大的块放在后面。5.1异常处理模
此文档下载收益归作者所有