14-1-异常及异常处理.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Java程序设计》 14.1 异常及异常处理 14.1.1 异常处理引入 14.1.2 异常处理机制 14.1.3 Checked异常和Runtime异常体系 14.1.4 使用throws声明抛出异常 14.1.5 使用throw抛出异常 14.1 异常及异常处理 C语言没有提供异常处理机制。目前主流的编程语言如Java、C#、Python等都提供了成熟的异常机制。 Java的异常机制主要依赖于try、catch、finally、throw和throws五个关键字,其中间try关键字后紧跟一对花括号括起来的代码块(花括号不可省略),简称try块,它里面放置可能引发异常的代码。catch后对应异常类型和一个代码块,用于表明该catch块用于处理这种异常类型的代码块。多个catch块后还可以跟一个finally块,finally块用于回收在try块里打开的物理资源,异常机制会保证finally块总被执行。throws关键宇主要在方法签名中使用,用于声明该方法可能抛出的异常;而throw用于抛出一个实际的异常,throw可以单独作为语句使用,抛出一个具体的异常对象。 14.1 异常及异常处理 开发者都希望所有的错误都能在编译阶段被发现,就是在试图运行程序之前排除所有错误,但这是不现实的,余下的问题必须在运行期间得到解决。 Java将异常分为两种,Checked异常和Runtime异常,Java认为Checked异常都是可以在编译阶段被处理的异常,所以它强制程序处理所有的Checked异常;而Runtime异常则无须处理。Checked异常可以提醒程序员需要处理所有可能发生的异常,但Checked异常也给编程带来一些烦琐之处,所以Checked异常也是Java领域一个备受争论的话题。 14.1 异常及异常处理 14.1.1 异常处理引入 没有人能保证自己写的程序永远不会出错!就算程序没有错误,也不能保证用户总是按你的意愿来输入。就算用户都是非常“聪明而且配合”的,你能保证运行该程序的操作系统永远稳定?你能保证运行该程序的硬件不会突然坏掉?你能保证网络永远通畅?……太多你无法保证的情况了! 对于一个程序设计人员,需要尽可能地预知所有可能发生的情况,尽可能地保证程序在所有糟糕的情形下都可以运行。考虑一个五子棋程序:当用户输入下棋坐标时,程序要判断用户输入是否合法,如果保证程序有较好的容错性,将会有如下的伪码。 14.1 异常及异常处理 14.1.1 异常处理引入 上面代码还未涉及任何有效处理,只是考虑了4种可能的错误,代码就已经急剧增加了。但实际上,上面考虑的4种情形还远未考虑到所有的可能情形(事实上,世界上的意外是不可穷举的),程序可能发生的异常情况总是大于程序员所能考虑的意外情况。 上面的错误处理机制,主要有如下两个缺点: 无法穷举所有的异常情况。因为人类知识的限制,异常情况总比可以考虑到的情况多,总有“漏网之鱼”的异常情况,所以程序总是不够健壮。 错误处理代码和业务实现代码混杂。这种错误处理和业务实现混杂的代码严重影响程序的可读性,会增加程序维护的难度。 14.1 异常及异常处理 14.1.1 异常处理引入 程序员希望有一种强大的机制来解决上面的问题,希望上面程序换成如下伪码。 14.1 异常及异常处理 14.1.1 异常处理引入 上面伪码提供了一个非常强大的“if块”——程序不管输入错误的原因是什么,只要用户输入不满足要求,程序就一次处理所有的错误。这种处理方法的好处是,使得错误处理代码变得更有条理,只需在一个地方处理错误。 现在的问题是“用户输入不合法”这个条件怎么定义?当然,对于这个简单的要求,可以使用正则表达式对用户输入进行匹配,当用户输入与正则表达式不匹配时即可判断“用户输入不合法”。但对于更复杂的情形呢?恐怕就没有这么简单了。使用Java的异常处理机制就可解决这个问题。 14.1 异常及异常处理 14.1.2 异常处理机制 Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。 14.1 异常及异常处理 14.1.2 异常处理机制 (1) 使用try...catch捕获异常 正如前面代码所提示的,希望有一种非常强大的“if块”可以表示所有的错误情况,让程序可以一次处理所有的错误,也就是希望将错误集中处理。 出于这种考虑,此处试图把“错误处理代码”从“业务实现代码”中分离出来。将上面最后一段伪码改为如下所示伪码。 14.1 异常及异常处理 14.1.2 异常处理机制 上面代码中的“if块”依然不可表示——一切正常是很抽象的,无法转换为计算机可识别的代码,在这种

文档评论(0)

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

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

1亿VIP精品文档

相关文档