电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C#异常处理1VIP免费

C#异常处理1_第1页
1/26
C#异常处理1_第2页
2/26
C#异常处理1_第3页
3/26
C#异常处理吴江洲2013.12.85.1一个产生异常的简单程序5.2异常的捕获与处理5.3异常的抛出及自定义异常本章内容5.1一个产生异常的简单程序创建控制台应用程序ExceptionPro,该程序能够捕获产生的异常,并进行相应的处理:staticvoidMain(string[]args){intn,m;strings=Console.ReadLine();n=0;try{m=Convert.ToInt16(s);//产生异常的语句Console.WriteLine("m={0}",m);}catch(Exceptione)//捕获异常{Console.WriteLine("产生异常:{0}",e.Message);//处理异常}Console.ReadKey();}试图将“123ab4”转换为整数时产生了异常产生该异常时自动转向执行该语句5.1一个产生异常的简单程序说明:可能出现异常的代码放在try块中处理异常的代码则放在catch块中当程序在运行过程中产生异常时,则会转向执行catch块中的代码,从而避免因异常的产生而导致程序运行的非正常终止。作用:使程序具有较强的错误处理能力,使得程序更加健壮和稳定。5.2异常的捕获与处理5.2.1异常的概念所谓异常,它是指程序在运行过程(而非编译过程)中产生的错误编译过程中的错误可以通过代码调试来避免,异常一般是不能避免的(只能是减少)5.2异常的捕获与处理5.2.2try-catch结构try-catch结构:try{//可能产生异常的代码}catch[(异常类对象名)]{//处理异常的代码}说明:(1)一旦在try块中有某一条语句执行时产生异常,程序立即转向执行catch块中的代码,而不会再执行该语句后面的其他语句。当然,如果try块中的语句都不产生异常,那么就不会有任何的catch块被执行。说明:(2)“(异常类对象名)”部分可以省略。如果省略这部分,则不管在try块中产生什么异常,程序都会转向执行catch块中的代码,但在这种情况下我们无法获取此异常的任何信息。说明:(3)“异常类”用于决定要捕获的异常的类型,不同的异常类能捕获和处理不同的异常,常用的异常类如表5.1所示5.2异常的捕获与处理5.2.2try-catch结构【例5.1】内存溢出异常的捕获和处理。在申请较大块的存储空间时可能出现失败,这时会产生一个内存溢出的异常(OutOfMemoryException),根据这个异常我们就可以决定下一步要采取什么样的动作。在下面的OutOfMemExc_Exa程序中,申请了20000*30000个存储单元,结果超出了笔者机器的可用内存空间,因而产生了内存溢出异常。5.2异常的捕获与处理5.2.2try-catch结构【例5.1】内存溢出异常的捕获和处理。staticvoidMain(string[]args){try{int[,]a=newint[20000,30000];//申请存储空间}catch(OutOfMemoryExceptione)//异常捕获与处理{Console.WriteLine("产生异常:{0}",e.Message);}Console.ReadKey();}5.2异常的捕获与处理5.2.3try-catch-catch结构当出现的多个不同的异常,需要用到带多个catch块的try-catch-catch结构。【例5.2】多个异常的捕获和处理。程序中,try结构包含的两条语句在执行时都会产生异常,分别为DivideByZeroException异常和OutOfMemoryException异常。这两个异常分别由两个catch结构来捕获和处理。5.2异常的捕获与处理5.2.3try-catch-catch结构staticvoidMain(string[]args){intn,m;n=30000;m=30000;try{n=1/(n-m);int[,]a=newint[n,n];}catch(OutOfMemoryExceptione1){Console.WriteLine("内存溢出异常:{0}",e1.Message);}catch(DivideByZeroExceptione2){Console.WriteLine("零除异常:{0}",e2.Message);}}由于DivideByZeroException异常先发生,故转向执行第二个catch块,第一个catch块没有被执行。5.2异常的捕获与处理5.2.3try-catch-catch结构多个catch块在出现顺序上有何要求呢?这要分两种情况来讨论:(1)catch后面的异常类之间没有继承关系(如DivideByZeroException和System.OutOfMemoryException),这时catch块的位置不分先后,即在前、在后都不影响程序的运行结果。例如,上例中的catch结构就属于这种情况。(2)catch后面的异常类之间存在继承关系(如DivideByZeroException类继承了ArithmeticException类、所有异常类都继承了Exception类),这时派生类所在的catch块必须放在基类所在的catch块的前面。即作用范围小的catch块放在前面,作用范围大的块放在后面。5.2异常的...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

您可能关注的文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部