C#培训资料第十一节.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章内容 什么是异常 Try语句 异常类 Catch子句 Finally块 为异常寻找处理代码 更进一步搜索 抛出异常 不带异常对象的抛出 11.1 什么是异常 异常是程序中的运行时错误,它违反了一个系统约束或应用程序约束,或出现了在正常操作时未预料的情形。 如果程序没有提供处理该异常的代码,系统就会挂起这个程序。 11.2 try语句 Try语句用来指明异常保护的代码块,并提供代码以及处理异常,若果他们发生的话try语句由3个部分组成。 Try块包含正被异常保护的代码。 Catch子句部分含有一个或多个catch子句,这些都是处理异常的代码块,也称为是异常处理程序。 Finally块含有在所有的情况下都要被执行的代码,无论异常有没有发生。 Try{执行的程序} Catch(){处理异常的程序} Finally{无论异常发布发生都要执行的代码} 11.3 异常类 有许多不同的异常可以在程序中发生。BCL定义很多类,每一个类代表一个指定的异常类型。当一个异常发生时,CLR: 创建该类型的异常对象。 寻找合适的catch自己处理它。 异常对象含有只读属性,带有导致该异常的信息。这些属性最常用的是message:这个属性含有解释异常原因的消息。 11.4 catch子句 Catch子句的异常处理。它有三种形式,允许不同级别的处理。 Catch{代码段}:一般的catch子句。 Catch(ExceptionType){代码段}:特定的catch子句。 Catch(ExceptionType instid){代码段}:带对象的特定的catch子句。 一般catch子句能接受任何异常,但不能确定引发异常的类型。这只允许对任何可能发生的异常的普通处理和清理。 特定catch子句形式把一个异常类的名称作为参数。它匹配该指定类或派生自它的异常类的异常。 带对象的特定catch子句提供最多有关异常的信息,它匹配该指定类的异常,或派生自它的异常类的异常。它还给出一个异常实例,称为异常变量,它是一个对CLR创建的异常对象引用。可以在catch子句块内部访问异常变量的属性,以获取关于引起异常的详细信息。 11.4.1使用特定catch子句的示例 Int x=10; Try { Int y=0; x/=y; //抛出一个异常 } Catch(dividebyzeroexception e) { Console.writeline(“message:{0}”,e.message); Console.writeline(“source:{0}”,e. source); Console.writeline(“stack:{0}”,e. stack); } 11.4.2 catch子句段 Catch子句段可以包含多个catch子句。当异常发生时,系统按顺序搜索catch子句的列表,第一个匹配该异常对象类型的catch自居被执行。因此catch自居的排序有两个重要的规则: 特定的catch自居必须以一种顺序排列,最明确的异常类型第一,直到最普通的类型。 如果有一个一般的catch子句,他必须是最后一个,并且在所有特定catch自居之后。使用一般catch是不好的。应该尽可能使用特定的catch子句。一般catch子句通过让程序继续执行隐藏错误,让程序处于一种未知的状态。 11.5 finally块 如果程序的控制流进入一个带finally块的try语句,哪么finally始终会被执行。 如果try块内没有异常发生,那么try块的结尾控制流跳过任何catch子句并到finally中。 如果在try块内部发生了异常,哪么在catch子句段中无论哪一个适当的catch子句被执行,接着就是finally快的执行。 即使try中有return语句,finally块总是会在返回到调用代码之前执行。 11.6 为异常寻找代码处理 当程序产生一个异常时,系统查看改程序是否为它提供一个处理代码。 如果在try中发生了异常,系统会查看是否有任何一个catch子句能够处理该异常。 如果找到了适当的catch子句: 1.该catch子句被执行。 2.如果有finally块,那么它被执行。 3.执行在try语句的尾部继续。 11.7 更进一步搜索 如果异常在一个没有被try语句保护的代码段中产生,或如果try语句没有匹配的异常处理程序,系统将不得不更近一步寻找匹配的处理代码。为此他会按照顺序搜索调用栈,以看看是否存在带匹配的处理代码的封装try块。 例如:如果系统的异常发生在method2中,系统会: 首先查看method2是否有能处理这个异常的异常处理程序,若有处理它程序继续,如果没有系统沿着调用栈找到method1寻找合适的处理代码。

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档