- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10.异常处理 本章要点 异常处理的意义 使用try...catch...finally 异常的继承体系 Checked异常与Runtime异常 throws与throw 自定义异常 异常跟踪栈 异常概述 异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++、C#、Ruby、Python等,大都提供了异常处理机制。增加了异常处理机制后的程序有更好的容错性,更加健壮。 传统错误处理的缺陷 传统错误处理机制,主要如下两个缺点: 无法穷举所有异常情况:因为人类知识的限制,异常情况总比可以考虑到的情况多,总有“漏网之鱼”的异常情况,所以程序总是不够健壮。 错误处理代码和业务实现代码混杂:这种错误处理和业务实现混杂的代码严重影响程序的可读性,会增加程序维护的难度。 使用try...catch捕获异常 执行try块里的业务逻辑代码时出现异常,系统自动生成一个异常对象,该异常对象被提交给Java运行时环境,这个过程被称为抛出(throw)异常。 这群里很多高手的,前面是三三中间四一,接着s是五七最后八一零。 Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块并把该异常对象交给该catch块处理,那这个过程被称为捕获(catch)异常;如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。 异常的捕捉流程 Java的异常体系 访问异常信息 如果程序需要在catch块中访问异常对象的相关信息,可以通过调用catch后异常形参的方法来获得。当Java运行时决定调用某个catch块来处理该异常对象时,会将该异常对象赋给catch块后的异常参数,程序就可以通过该参数来获得该异常的相关信息。 所有异常对象都包含了如下几个常用方法: getMessage():返回该异常的详细描述字符串。 printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。 printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。 getStackTrace():返回该异常的跟踪栈信息。 异常处理 try { 需要检测的代码; } catch(异常类 变量) { 异常处理代码; } finally { 一定会执行的代码; } Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。 Java 7提供的多异常捕捉 在Java 7以前,每个catch块只能捕捉一个异常。从Java 7开始,一个catch块可以捕捉多个异常。 catch(异常1 | 异常 2 | 异常3 ex) { } 多个异常之间用竖线隔开。 多异常捕捉时,异常变量之前有隐式final修饰。 使用finally回收资源 程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,finally块总会被执行。 异常处理的嵌套 异常处理流程代码可以放在任何能放可执行性代码的地方,因此完整的异常处理流程既可放在try块里,也可放在catch块里,也可放在finally块里。 异常处理嵌套的深度没有很明确的限制,但通常没有必要使用超过两层的嵌套异常处理,层次太深的嵌套异常处理没有太大不要,而且导致程序可读性降低。 Java 7的自动关闭资源的try语句 try( // 此处声明的资源, 系统可以自动关闭它。 ) { // } 对于自动关闭资源的try语句, 可以没有catch和finally——try块可以孤独地存在。 自动关闭资源的try语句,有两个注意点: 只有放在try后面的圆括号里的资源才会被关闭。 能被自动关闭的资源必须实现Closeable或AutoCloseable接口。 Checked异常与Runtime异常 Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常)。所有RuntimeException类及其子类的实例被称为Runtime异常;不是RuntimeException类及其子类的异常实例则被称为Checked异常。 Checked异常的处理 当前方法明确知道如何处理该异常,程序应该使用try...catch块来捕获该异常,然后在对应的catch块中修改该异常。例如前面介绍的五子棋游戏中处理用户输入不合法的异常,程序在catch块中打印对用户的提示信息,重新开始下一次循环。 当前方法不知道如何处理这种异常,应该在定义
原创力文档


文档评论(0)