《异常处理Java程序设计及应用.ppt》由会员分享,可在线阅读,更多相关《异常处理Java程序设计及应用.ppt(11页珍藏版)》请在三一办公上搜索。
1、2023/11/13,1,Java程序设计及应用开发教程,主编:虞益诚,E-mail:,2023/11/13,第6章 异常处理,2,第6章 异常处理,6.1 异常处理机制6.2 异常处理方法 6.3 本章小结本章主要讲述Java语言中的异常及异常处理方法。首先讲述了Java语言的异常处理机制,对Java的异常类层次进行了描述,对常见的异常类型作了解释;对捕获异常以及异常处理方法的常用语句进行了解释和分析;也对自定义异常的方法进行了讲解。,2023/11/13,第6章 异常处理,3,6.1 异常处理机制,异常(Exception)就是程序在运行过程中所发生的异常事件,即不可预测的非正常情况。Ja
2、va语言提供的异常处理机制主要是用来处理程序执行过程中产生的各种错误(如数组下标越界、除数为0等)。使用异常对程序给出一个统一和相对简单的抛出和处理错误的机制。如果一个方法本身能抛出异常,当所调用的方法出现异常时,调用者可以捕获异常使之得到处理;也可以回避异常。6.1.1 异常层次结构 异常类的根节点为Throwable,它分为两大类Error(错误)和Exception(异常)。常见系统定义的执行异常如表6-1所示。例如:int x=0,y;y=20/x;ArithmeticException算术错误异常,图6-1 异常的层次结构,2023/11/13,第6章 异常处理,4,6.1 异常处理
3、机制0,2023/11/13,第6章 异常处理,5,6.1 异常处理机制,6.1.2 异常处理机制 异常采用了一种面向对象的处理机制,把异常看作一种类,每当发生此类事件时,Java即自动创建一个异常对象,并执行相应的代码去处理该事件。6.1.3 异常的分类 异常通常分为三种类型:第一类是Java虚拟机由于某些内部错误产生的异常,这类异常不在用户程序的控制之内,用户不需要处理这类异常;第二类是标准异常,这类异常通常是由程序代码中的错误产生的,例如被0除、数组下标越界等。这是需要用户程序处理的异常。第三类是用户根据需要在程序中自定义的异常。6.1.4 内置异常类 系统中原有的异常类称为内置异常类,
4、与自定义异常类不同,内置异常类是系统已经定义好的,程序员只能对产生了这些异常之后如何进行处理来编程,不能指定怎样的异常属于内【例6-1】应用程序采用默认异常处理的执行情况。类。,2023/11/13,第6章 异常处理,6,6.2 异常处理方法,Java提供了两种异常方法:其一是使用trycatchfinally结构语句对异常进行捕捉和处理;其二是通过throw和throws抛出异常。6.2.1 异常的捕获与处理 异常处理的语法结构形式如下:try 可能出现异常的程序执行体 catch(异常类型1 异常对象1)异常类型1对应异常处理程序体1 catch(异常类型2 异常对象2)异常类型1对应异常
5、处理程序体2.Finally 异常处理结束前的执行程序体【说明】try语句用于指明可能产生异常的程序代码段,其中所写的为被监视的代码段,一旦发生异常,则由catch代码进行处理。catch为等待处理的异常事件及其处理代码,在try语句之后。一个try语句可以有若干个catch语句与之相匹配,用于捕捉异常。每一个要捕捉的异常类型对应一个catch语句,该语句包含着异常处理的代码。finallly为最终处理的代码段,是个可选项,如果包含有finally块,无论异常是否发生,finally块的代码必定执行。,2023/11/13,第6章 异常处理,7,6.2.1 异常的捕获与处理,【例6-2】异常的
6、捕获与处理。public class TryCatchTest public static void main(String args)int a=20,b=0,c;try System.out.println(“Before Exception”);c=a/b;System.out.println(“After Exception”);catch(ArrayIndexOutOfBoundsException e)System.out.println(“ArrayIndexOutOfBoundsException Access”);catch(ArithmeticException e)Sys
7、tem.out.println(“ArithmeticException Access”);System.out.println(“Exception Access End”);【程序解析】从执行结果看,程序在c=a/b这一行产生了异常,该行称为异常的抛出点。由于产生的异常是ArithmeticException类型,因此流程转到相应的catch语句中,处理结束后转到try-catch语句的外部。程序运行结果如图6-2所示。,图6-2 异常的捕获与处理示意图,2023/11/13,第6章 异常处理,8,6.2.2 异常的抛出,通常异常是由系统自动捕获的。但程序员也可通过throw语句抛出异常。
8、有时一个方法并不需要处理它所生成的异常,而是向上传递,由调用该方法的其他方法来捕获该异常,这时就要用到throws子句。异常抛出用于指出程序当前行存在异常,当程序执行到throw语句时,流程就转向相匹配的异常处理语句,其下的代码不再执行,所在的方法也不再返回值。throw的执行点也称为异常抛出点。throw语句的格式为:throw new 异常类名(“信息”)throws语句的格式相对复杂点,格式如下:返值类型 方法名(形式参数列表)throws 异常列表/方法体 格式中异常类名为系统异常类名或用户自定义的异常类名,“信息”是可选项。若提供该信息,toString()方法的返回值中将增加该信息
9、内容。格式throws声明的异常必须是Throwable类或其子类,用throws关键字声明的异常类还可以是实际抛出的异常类的父类。若某方法可能产生yuexcep1,yuexcep2和yuexcep3三种异常,它们都是parent-exception类的子类,那么除了可以声明抛出yuexcep1,yuexcep2和yuexcep3类之外,尚可简单地声明抛出parent-exception。注:throw和throws语句不同,前者是一个独立的语句,而后者总是和方法定义结合使用的。,2023/11/13,第6章 异常处理,9,例6-4,【例6-4】异常的抛出程序。class YUExceptio
10、n extends Exception String delail;public YUException()/异常构造函数0 this.delail=;public YUException(String s)/异常构造函数1this.delail=s;String ShowExceptiondelail()return this.delail;/返回接收到的异常信息public class ThrowExceptionEx public static void main(String args)tryTest();catch(YUException e)System.out.println(我
11、的YU异常类:);System.out.println(抛出的异常对象已被捕捉!);System.out.println(异常对象信息为:+e.ShowExceptiondelail();static void Test()throws YUExceptionthrow new YUException(Test()暂且处理不了这个异常,交调用者处理!);/抛出异常/END,2023/11/13,第6章 异常处理,10,自定义异常类可以通过继承Exception类或它的子类实现。自定格式为:class自定义异常类名extends Exception 异常类体;总体上大致分为两步:(1)异常类的定
12、义。例如:class useException extends Exceptionint n=0;useException()n+;useExceptions(String s)super(s);n+;String show()return”selfdefinedExceptionObj:”+n;(2)异常对象的定义,及对象的抛出。创建异常对象的格式是:异常类型 对象名=new 异常构造函数(参数)。在useException基础上,我们编写如下的程序。public class testException static void Test()throws useException useExc
13、eption e=new useException(“selfdefinedExceptionObj”);throw e;public static void main(String args)try Test();catch(useException e)System.out.println(e.show();,6.2.3 自定义异常,2023/11/13,第6章 异常处理,11,本章主要讲述了Java的异常处理机制,主要由try、catch、finally、throw和throws几个语句构成。异常处理是Java的一个优点,可以使程序员方便地进行错误处理,不至于因为发生异常导致系统崩溃,从
14、而使系统更加健壮和友好。思考和练习1.何谓异常?Java是怎样处理异常问题的?2.计算n!并捕获可能出现的IllegalAccessException、ArrayIndexOutOfBoundsException异常。3.定义一个circle类,其中包含计算圆周长和面积的方法,若输入的半径小于0,就抛出一个自定义异常。4.何谓抛出异常?如何完成抛出异常。5.定义一个对象类型的引用,并将其初始化为null,然后通过这个引用调用某个方法,并通过try-catch语句捕捉出现的异常。6.利用继承性定义一个异常超类,然后定义几个异常子类。编写程序验证catch语句是如何捕捉各类异常的。,6.3 本章小结,