- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java_7_异常
* * 第八章 异常 本章提要 JAVA异常的概念 异常处理机制 异常的分类 抛出异常 处理异常 8.1 异常及其处理机制 在运行一个程序时,谁都不愿意碰到错误。如果因为程序出错而导 致用户丢失他们在一段时间内的全部工作,那么,这些用户可能永远也 不会中使用你的程序了。如果产生错误,最起码你得: ·通知用户错误产生。 ·尽量保存用户已做的全部工作。 ·允许用户顺利退出程序。 在一个方法中出错误的传统处理方式是返回一个特殊的错误代码。 例如,返回-1表示方法indexOf(string str)没有在当前字符串中找到 一个与str匹配的子串。 不幸的是,并不一定总是能够返回一个错误代码的。例如,对一个 返回整数的方法来说,并不能靠返回-1来代表错误。因为-1也可能是它 的一个有效数据。 JAVA中的 “异常”(Exception)实际上就是程序运行中出现的错误。 但JAVA系统将各种常见的错误予定义成一个个异常类(一个异常对应一种 错误)。同时,也支持用户自定义特殊的异常类。而“异常”就是异常类的 一个实例。 那么,异常与传统意义上的程序错误又有什么区别呢? 在 JAVA系统中,对异常的处理方式采用了标准化的机制——异常处理 机制。其处理过程如下: (i)抛出异常 每当方法中出现异常时,系统或方法就可以生成(创建)一个相应的 异常——这个过程就叫做抛出异常。 (ii)捕捉异常 每当方法中抛出异常时,系统就会立即自动寻找处理该异常的语句块 ——异常处理器。 (iii)处理异常 若在程序中找到异常处理器,则将该异常交于异常处理器处理;否 则,系统就将交给默认的异常处理器来处理——打印异常信息并终止程序 的运行。 8.2 异常的分类 JAVA中予定义了许多异常类,以对应各种常见的运行时错误。这异 常类都是类java.lang.Throwable(“可抛出类”)的子类。它们的继承关 系如下层次结构: Throwable RuntimeException Error Exception Object …… …… …… (不受检查异常) (受检查异常) (不受检查异常) JAVA又将这些异常类分成“受检查异常”和“不受检查异常”两种。 8.2.1 受检查的异常 概念 这类异常是指:可以被编译器查出的异常. 2. 特点 当JAVA编译器遇到一个会抛出异常的方法被调用时,将检查程序是否处 理了这个异常,或者程序如果不处理,那么程序是否通过继续抛出该异常来 通知系统。若程序未作这些处理,那么,编译器将给出错误信息。该程序也 因此而编译失败。 3. 系统予定义的受检查异常 例如, 包java.lang中的异常类ClassNotFoundException等。 包java.io中的异常类IOException及其子类等。 …… 通常,大多数教材中都会列出这些异常类的名单。这里不再赘述。 每当你的程序中调用了会抛出这些异常的方法时,那么,你要么自己编 写代码来处理这些异常,要么你将该异常抛给系统来处理(前者可以避免程 序被终止)。 至于如何来判断一个方法是否会抛出异常,稍后将介绍。 实际上,只有异常类Exception中除其子类RuntimeException外的其它 子类才是受检查异常。 8.2.2 不受检查的异常 在JAVA中,Error的子类以及RuntimeException的子类都是“不受检查 的异常”。这是因为: Error的子类对应的都是系统的内部错误。一旦出现这一类异常,则不存 在程序的恢复问题。你不必关心它们,否则你也是徒劳! 而产生一个RuntimeException的原因一定是编程的错误。例如,一个错 误的类型转换、被0除、一个下标越界等。 请记住一个规则:“如果它是一个RuntimeException异常,那么,这是 你的错!” 而任何其它异常的出现,是因为你的好程序碰上了一个意外情况。 实际上,在编译时,要使编译器去确定是否发生了诸如“被0除”之类 的异常是不可能的。因为这些异常无处不在。因此,编译器将放弃对这些异 常的检查。 当然,你可以抛出并处理这些异常。但是,与其到处抛出异常,还不如 仔细完善你的程序,以避免这些异常。 因此,要提高程序的正确性,编程人员必须自行检查并竭力避免这一类 的异常。 8.2.
文档评论(0)