- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 Java异常处理
提要:
掌握Java的异常处理机制
使用try、catch、finally处理异常
使用throw和throws引发异常
getMessage和printStackTrace方法
自定义异常类异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点。Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应于不同的子类异常,定义异常处理的规范。在1.4版本以后增加了异常链机制,从而便于跟踪异常。这是Java语言设计者的高明之处,也是Java语言学习中一个重要的知识点。Java的异常处理机制可以使程序设计人员方便、快捷地处理程序执行过程中出现的各种异常情况,在很大程度上提高了程序编写和测试的效率。9.1? 异 常 概 述
在程序设计中,错误通常分为两类,即编译错误和运行错误。编译错误是比较容易发现的,而运行错误常常让开发人员感到头疼。异常就是一个运行错误,如果不能很好地处理异常,则项目的稳定性就不强。所以为了增强项目的稳健性,就要求对出现异常时进行相关处理,亦即异常处理。
其实在生活中,也可以很容易找到诸如异常的事例。例如,小王每天开车去上班,正常情况下耗时在30分钟以内,若把上班的动作描述为方法,则伪代码为:
上班(){
输出 一路畅通;
}???
用示意图来描述上班这个方法效果如图9.1所示。
图9.1? 示意图(1)
如果遇上道路限行或其他交通情况就会耗时大于30分钟,对于这种情况,生活中肯定会及时与工作单位取得联系,通过电话请假避免影响工作。而对于程序而言,这就算是一种异常情况。及时与工作单位取得联系的做法可用编程术语描述为“异常处理”。其示意图如图9.2所示。
图9.2? 示意图(2)
在不支持异常处理的程序设计语言中,程序员为了检查可能发生的异常情况,需要在程序中设置一些标记量,并使用很多的if…else语句,并且要求程序员非常清楚地知道是什么导致了异常的产生以及异常的确切含义。若用代码来描述图9.2所示的过程,则伪代码为:
上班(){
设置标量值;
调用标量输出(标量值);
}
??? 标量输出(标量值){
if(堵车){
?? call公司;
?? 输出 堵车;
}else if(撞车){
?? call 公司撞车;
?? 输出 撞车;
}else{
输出 一路畅通;
}
}
而在Java中,没有必要去编写上述的这些if…else语句,在默认的情况下,异常会输出一个错误消息,并中止线程的执行。为了更好地处理异常情况,程序员通常会在程序中定义异常处理段来捕获和处理异常。这样,当异常情况发生时,一个代表该异常类的对象就会被创建,并在产生异常的方法中被触发。上班()方法可以选择处理异常的方式:由自己处理或抛出该异常。使用Java语言提供对异常处理的支持,改写上班的伪代码如下所示。
上班()可能存在 堵车,撞车{
?try{
?? 输出 一路畅通;
?? }catch(堵车){
????? call 公司堵车
?? } catch(撞车){
????? call 公司撞车;
?? }
??? }
通过比较可以发现,采用异常类不仅可以使代码变得更加简洁,而且能够为程序调试提供很大的方便,从而达到提高程序健壮性的目的。
Java提供了一个Throwable类,它的API界面截图如图9.3所示。
图9.3? Throwable类的API界面截图
Throwable类是Java语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Java的throw语句抛出。类似地,只有此类或其子类之一才可以是catch子句中的参数类型。它的两个子类的实例Error 和 Exception通常用于指示发生了异常情况。这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。Throwable 类及其子类的结构如图9.4所示。
图9.4? Throwable类及其子类结构图
在Java 编程语言中,异常有两种分类。java.lang.Throwable类充当所有对象的父类,可以使用异常处理机制将这些对象抛出并捕获。在Throwable类中定义方法来检索与异常相关的错误信息,并打印显示异常发生的栈跟踪信息。它有Error 和Exception 两个基本子类。
错误(Error):JVM系统内部错误、资源耗尽等严重情况;
异常(Exception 违例):其它因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根、空指针访问、试图读取不存在的文件、网络连接中断等。
当发生Error 时,程序员根本无能为力,只能让程序终止。比如说内存溢出,不可能指望程序能处理这样的情况。而对于Ex
文档评论(0)