《意外的情况-异常处理.ppt》由会员分享,可在线阅读,更多相关《意外的情况-异常处理.ppt(20页珍藏版)》请在三一办公上搜索。
1、第11章 意外的情况异常处理,11.1 异常处理的概念11.2 Java异常的体系结构11.3 Java程序中如何处理异常11.4 定义自己的异常11.5 编写健壮的Java程序11.6 小结11.7 习题,11.1 异常处理的概念,11.1.1 为什么要处理异常11.1.2 异常处理的简单范例,11.1.1 为什么要处理异常,程序实际运行过程中肯定会遇到这样那样的偶然情况,实际执行当中不可能完全像我们当初设计程序时预想的那样准确无误地从头运行直到结束。当遇到这些情况的时候,我们的程序需要进行相应的处理,能够让程序尽可能正常运行下去,不要因为一处小小的意外导致程序不能正常工作或是得到错误的结果
2、。这就是异常处理的主要目的,让我们的Java程序适应能力变得更强,可以容忍一定的错误情况。1Java程序中经常遇到的异常情况 2Java中如何处理异常 3异常与错误有什么区别,11.1.2 异常处理的简单范例,Java中异常处理的过程可以抽象为4个阶段:(1)异常发生。(2)异常捕获。(3)异常处理。(4)恢复正常。这个过程可以使用下面的流程图来表示,请大家先看看图11.1中的流程图。图11.1,11.2 Java异常的体系结构,11.2.1 Exception类及其子类11.2.2 部分Java中的异常类的含义11.2.3 Java中可能会抛出异常的方法,11.2.1 Exception类及
3、其子类,Java中所有的异常类都是由java.lang.Exception类派生出来的,这就像所有的类都是由Object类派生出来一样。很自然,Exception类也是由Object类的子类Throwable类派生出来。需要告知大家的是,虽然这些异常类都是Exception类的子类,但它们可不一定包含在同一个包中哦!这是因为Java中的各种操作都有可能会发生异常,将所有的异常类放在一个包中是不现实的。图11.2 Java异常处理流程图,11.2.2 部分Java中的异常类的含义,Java中的异常类有些类似上一章中讲的I/O类,它们之间的情况都是大同小异,适合用在不同的异常情况下。给大家列出部分
4、常用的,比较典型的异常类,通过它们来学习Java中的异常处理。下面我们将部分异常类的信息列到了下表中,请诸位过目先。,11.2.3 Java中可能会抛出异常的方法,下面的表中列举出几个会抛出异常的方法,我们先来看下这几个简单的异常吧!,11.3 Java程序中如何处理异常,11.3.1 捕获异常11.3.2 获取异常信息11.3.3 try、catch和finally11.3.4 异常处理举例,11.3.1 捕获异常,现在我们来看如果Java程序的执行过程中遇到意外,抛出的异常如何被捕获。要想处理Java程序运行过程中抛出的异常,首先要捕获它们。前面讲过异常处理的流程当中,try区块中的内容是
5、异常产生并被抛出的地带。这里面产生的异常将由紧随其后的catch语句所捕获。1多个catch语句的顺序,如图11.3所示2在多层方法调用中的异常抛出顺序,如图11.4所示图11.4 图11.3,11.3.2 获取异常信息,在捕获异常之后,处理异常之前,必然是要先得到异常的相关信息。这些信息不仅仅用来在程序的异常处理中用得着,它们最大的作用是可以帮助我们分析异常产生的原因,改善程序的设计。我们在捕获异常的时候,catch语句所接收的只有一个参数Java的异常对象。这也就意味着如果我们要想在catch语句捕获异常之后来获取异常信息时只能从异常对象当中取得异常的相关信息。,11.3.3 try、ca
6、tch和finally,我们已经知道Java的异常处理过程一共有3个大的部分:try,catch和finally。其中try区块是有可能发生异常的代码所存放的位置;它的后面可以跟一个或多个catch语句,这些catch语句各自负责处理自己所能够捕获的指定类型的异常。在try区块的后面必须紧跟catch语句,中间不能有其它任何代码,而且一个catch语句前面只能有一个try区块。在catch语句的后面,可以有选择地加上finally区块。inally区块是不论是否有异常发生都会执行的部分。这部分的作用一般是用来释放系统的资源,或是将一些对象的状态恢复到程序执行之前的样子,能让我们的程序保持一致性
7、。,11.3.4 异常处理举例,前面已经将Java中异常处理的内容介绍完了,按照惯例我们在最后会给大家提供一个实例。这个例子当中我们所做的事情就是从终端几个学生的成绩,然后计算他们的总成绩和平均成绩,并将所有的数据都保存到一个文件中。学生的人数也是在程序最开始的时候由用户在终端上输入。整个过程中有多处需要进行异常处理的情况,一起来看看吧!,11.4 定义自己的异常,11.4.1 自己定义异常类11.4.2 抛出异常11.4.3 异常抛出实例,11.4.1 自己定义异常类,异常也是类,Java中能够定义自己的类,所以同样也能够定义自己的异常!而且异常的定义过程跟普通类的定义其实没什么两样,唯一的
8、区别在于,在定义异常类的时候必须写明要扩展Exception类或者它的任何一个子类。现在来看一下定义异常类的语法。public class 异常类名称 extends Exception/异常类的成员定义,11.4.2 抛出异常,在定义方法是声明所抛出异常的语法格式如下:访问控制关键字 返回类型 方法名称(参数列表)throws 异常1,异常2,/方法的实现现在来看看如何在一个方法当中抛出异常吧。抛出异常的语法很像return语句,它的格式是这样的:throw 异常对象名;,11.4.3 异常抛出实例,现在我们可以来做个完整的Java异常处理的例子啦,前面的准备工作已经做得很到位,有了自己定义
9、的异常类InvalidValueException,还知道如何在方法中抛出异常。现在我们就综合运用这些知识来写个带异常处理的程序例子。这次所做的事情同前面一样,只是我们异常处理的更加全面,这能够让我们的程序对用户输入的错误信息有更强的“抵抗力”。,11.5 编写健壮的Java程序,在异常处理的过程中,会有很多种方式与策略,究竟在什么情况下采用哪种异常处理办法,这还是值得讨论的话题。这一节中主要就是向大家介绍下这面的知识。1异常处理的策略2异常处理的例子,11.6 小结,这一章所讲的内容虽然与前面所讲的内容相差很大,但它却与前面各章节都有很大关系,几乎程序中的任何地方都会遇到异常情况的处理。在一开始,我们是从最基本的概念讲起的,介绍了这么多关于异常的内容,其实最终的目的只有一个,那就是编写健壮的Java程序。所谓健壮,是指程序对用户的操作,输入,或其它的参数,文件错误有一定的抵抗能力,不会因这些小问题导致程序出大麻烦。最后我们向大家介绍如何编写健壮的Java程序,这是本章的最终目的。相信大家将来都能够成为Java高手的,为这个目标而努力学习吧!,11.7 习题,【习题1】简述Java中的异常处理机制的原理和应用。【习题2】简述try,catch,finally3个语句块的执行过程。【习题3】异常处理有哪几种策略?,