- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《面向对象技术与方法》课程补充讲稿(2006级计算机技术工程硕士与高师班) 周 晓 聪 isszxc@ /~zxc 中山大学计算机科学系 2008年5月 内容提纲 结构化异常处理 Java语言的异常处理 异常的分类结构 异常与方法基调及重载 异常的产生、捕获、处理与传播 异常处理与继承机制 断言与基于合约的程序设计 Java语言的断言机制 结构化异常处理 异常与错误 异常是某些很少出现的事件 检测到这些事件发生的程序缺乏足够信息对其进行处理而要报告给最适合处理该事件的程序 异常中断程序的控制流,但在合适的程序处理之后可恢复执行 错误也中断程序的控制流,且无法恢复执行 结构化异常处理 权宜之计 返回特殊值或直接跳转到专门的异常处理程序 结构化异常处理 将异常的检测与处理分开 程序的控制不会因为异常的产生而随意跳转 结构化异常处理机制 异常的检测、报告与处理 结构化异常处理 异常处理的模式 两个基本问题 报告与处理:必须确定由哪个方法处理报告出来的异常 唤醒:引发异常的方法是否可在异常处理之后继续执行 两种模式 只能逐级报告和唤醒 可以越级报告和唤醒 Java语言的异常处理模式 只允许检测到的异常逐层向上传播 不支持唤醒某个引发异常的方法 异常是方法接口的一部分 Java语言的异常处理机制 异常的分类 用类表示异常,引发异常时创建代表异常的对象 类Throwable是所有异常类的祖先类 子类Exception及其后代类标识异常 子类RuntimeException表示运行中一些常见异常 用户自定义的异常通常声明为这个类的子类 子类Error及其后代类表示不可恢复的错误 需要检测的异常和无需检测的异常 无需检测的异常 程序不需要显示检测和处理这类异常 类Error及其后代类、类RuntimeException及其后代类 需要检测的异常 程序需要显示检测和处理这类异常,或者 或者声明抛出以向上传播异常 Java语言的异常处理机制 异常与方法接口及重载 在下列情况下,异常声明必须是方法接口的一部分 该方法用throw语句抛出异常 该方法调用的方法会抛出异常,而该方法没有用catch语句块进行处理 该方法必须声明所抛出的异常类或其祖先类 异常声明不能用来区分互为重载的方法 只有参数列表不同的方法才是互为重载的方法 编写只是异常声明不同的两个同名方法会产生编译错误 Java语言的异常处理机制 try…catch…finally语句 try语句块包围那些可能引发异常的语句 catch语句块包含处理异常的代码 finally语句块包含执行收尾工作的语句 不管是否发生异常,该语句块中的语句都会执行 异常的匹配 可以有多个catch语句块 按catch语句块书写的顺序进行检查 当发生某个catch语句块声明的异常类是抛出的异常类的祖先类时,就执行该catch语句块 因此,使用catch语句捕获异常时,子类必须放在祖先类之前 异常的转发:重新抛出异常 Java语言的异常处理机制 异常与继承机制 对于构造方法 子类构造方法必须声明抛出父类构造方法所声明抛出的异常类或其祖先类 子类构造方法也可声明抛出新的异常类 对于重定义方法 子类重定义方法可以不声明抛出父类方法所声明抛出的异常 子类声明抛出的异常必须是父类方法声明抛出的某个异常类本身或其后代类 两个规则 子类重定义方法如果要声明抛出异常类类型T,则对于父类及它实现的接口中每个被重定义的方法,都要能找到该方法声明抛出的某个异常类类型S,使得T是S的子类型 如果方法A调用方法B,则对方法B所声明抛出的每个异常类类型T,方法都要捕获或声明抛出某个异常类类型S,使得T是S的子类型 程序断言机制 程序断言 断言可用于表达对实体的约束 断言可描述接口的部分语义 断言是基于合约设计的核心 断言可用于描述客户与服务之间的合约 程序断言种类 方法的前后置断言 类的不变式 循环不变式 状态检测断言:检测程序运行过程中某些变量的状态 Java语言的断言机制 只在JDK 1.4以后支持状态检测断言 在使用javac进行编译时需要使用参数 – source 1.4 表明程序按1.4版本编译而支持断言 缺省时按 1.3版本编译,这时assert将作为一般标识符 在使用java运行程序时可使用参数 –ea 激活断言检测机制,也可使用参数 –da 关闭断言检测机制 缺省时是关闭断言检测机制 两种形式的断言 assert ConditionExpression 条件不满足时将抛出AssertionError() assert ConditionExpression:InitialExpression 条件不满足时将抛出AssertionError(InitialExpression) * * *
文档评论(0)