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