Java程序设计基础 课件 第8章 异常处理.pptx

Java程序设计基础 课件 第8章 异常处理.pptx

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第八章异常处理;

8.1异常处理基础;

如图8-1所示是Java异常类的层次结构。

;

在这个异常类层次最上层的是Throwable,它是java.Lang包中的一个类,该类的名字类似接口名,但实际是一个Java类。Throwable类是Java语言中所有错误或异常的超类,该类派生了两个子类java.lang.Error和java.lang.Exception。图中最底层的三项分别说明如下。;

(1)?RuntimeException(运行时异常)。运行时异常是程序运行时自动对某些错误做出反应而产生的,所以对于运行时异常不需要编写异常处理的程序代码,依然可以成功编译,主要包括算术异常类、空指针异常类、下标越界异常类、数组元素个数为负异常类、类型强制转换异常类、无效参数异常类等等。这类异常应通过检查程序和程序调试来尽量避免,而不是使用try-catch-finally语句捕获处理,比如a/b,其中的b有可能为0,但是这样的表达式是不需要进行异常处理的。;

(2)其它异常类。其它异常类指的是在Exception类下除了RuntimeException之外的异常类,可以称之为受检类异常(CheckedException)。这种异常经常是在程序运行过程中由环境原因造成的,如输入/输出I/O异常、网络地址不能打开、文件未找到等,对于受检类异常必须在程序中使用try-catch-finally语句捕获并进行相应的处理,否则不能通过编译。这是语法上的强制要求,主要在Java的输入/输出程序中比较常见。;

(3)各种Error子类。各种Error子类是由系统保留的异常类,该类定义了那些应用程序通常无法捕捉到的错误,一旦此类错误发生,程序就停止运行。该类主要包括内存溢出错误类、栈溢出错误类、类定义未找到错误类、图形界面错误类等。

各种Error子类主要包括OutOfMemoryError、StackOverflowError、NoClassDefFoundError、java.awt.AWTError等。;

从上面的描述来看,Java的异常主要有三类:

(1)程序不能处理的错误Error;

(2)程序应避免而可以不去捕获的运行时异常RuntimeException;

(3)必须捕获的非运行时异常CheckedException。;

8.2异常处理语法;

try-catch-finally异常处理语法的格式为;

说明:

(1)?try块:监控区主要是对可???发生受检类异常CheckedException的程序语句段使用try进行包围,而对于可能发生Error或者RuntimeException的语句一般不进行监控。

(2)?catch块:如果程序需要在catch块中访问异常对象的相关信息,可以通过catch后异常形参来获得,然后在后面的语句块中进行处理。在一个try-catch-finally的结构中,try块只有一个,而catch块可以有多个,表示能对监控区中的语句进行监控,可以捕捉多个可能发生的异常。;

(3)?finally块:不管监控区是否发生异常,异常被抛出是否被捕捉到,在try-catch-finally结构的运行流程中如果有finally块,就一定要执行finally块中的语句。finally块是可以被省略的,它常常被用来回收一些物理资源,如数据库连接、网络连接、磁盘文件等。

Java异常处理机制如图8-2所示。;

;

如果没有异常处理机制,会如何?

(1)异常一旦发生,整个程序就会在发生异常的地方终止运行。

(2)如果没有异常处理机制,可以使用if-else的结构来处理可能发生的异常,从图8-2也可以看出异常处理机制类似于分支结构(注:多分支对应了异常处理可以有多个catch语句)。;;

多个分支结构,类似于try-catch-finally中的多个catch结构。如果有多个catch语句,要注意catch的排列顺序,如果父类的异常类放在前面,子类放在后面,按照向上转型的观点,子类catch就不能捕捉到相应的异常对象,因为父类在前面对异常对象的捕获进行了“拦截”(只要有一个catch捕捉到异常对象,后面的catch结构就不再执行,这个与多分支结构if-elseif是逻辑一致的)。有不少“偷懒”的程序员,在监控区后面就只写一个catch(Exceptionex),表示对所有的异常类进行捕获,这样也满足了异常处理的语法要求。;

当try块一旦发生异常,系统就会生成对应的异常类对象然后抛出,而异常处理机制就会依次使用后面的catch语句来进行捕捉;一旦捕获该异常对象,会将该异常对象赋给catch块后

文档评论(0)

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

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档