工学第9章-异常处理new_第1页
工学第9章-异常处理new_第2页
工学第9章-异常处理new_第3页
工学第9章-异常处理new_第4页
工学第9章-异常处理new_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章异常处理重点:

在编写程序时,要正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。

难点:

如何使用Java中两种异常处理机制,抛弃异常和声明抛弃异常的区别与联系。

难重点【教学目标】

本讲主要讲述了java语言中独特的异常处理机制,通过本讲的学习,同学们可以编写更为完善的java程序。【难重点】

重点:

在编写程序时,要正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。

难点:

如何使用Java中两种异常处理机制,抛弃异常和声明抛弃异常的区别与联系。【本讲知识点】

1什么是异常

1.1异常示例

1.2异常处理机制

1.3异常类的层次

2异常的处理

2.1捕获异常

2.2声明抛弃异常

3自定义异常类的使用9.1异常处理机制

Java使用异常对程序给出一个统一和相对简单的抛出和处理错误的机制。如果一个方法本身能抛出异常,调用者可以捕获异常使之得到处理;也可以回避异常,这时异常将在调用的堆栈中向下传递,直到被处理。classExceptionDemo2{

publicstaticvoidmain(Stringargs[]){

inta=0;System.out.println(5/a);}

异常Java把程序运算中可能遇到的错误分为两类:一类是非致命性的,通过某种修正后程序还能继续执行。这类错误称作异常。另一类是致命性的,即程序遇到了非常严重的不正常状态,不能简单地恢复执行,这就是错误。Java提供了异常处理机制,在Exception类中定义了程序产生异常的条件。对待异常通常并不是简单地结束程序,而是转去执行某段特殊代码处理这个异常,设法恢复程序继续执行。Java实现了C++风格的异常。当程序中发生异常时,称程序产生了一个异常事件,相应地生成异常对象。生成的异常对象传递给Java运行时系统。异常产生和提交的这一过程称为抛出。异常发生时,Java运行时系统从生成对象的代码块开始,沿方法的调用栈逐层回溯,寻找相应的处理代码,并把异常对象交给该方法处理,这一过程称为捕获。所有的包中都定义了异常类和错误类。Exception类是所有异常的父类,Exception类对象由应用程序处理或抛出。Error类是所有错误的父类,表示很难恢复的错误,如内存越界,一般不期望用户程序来处理,即使程序员有能力处理这种错误,也还是交给系统处理为好。Error类对象由Java虚拟机生成并抛出。

这两个类同时又是Throwable的子类。异常和错误类的层次结构如图所示:Java.lang.ThrowableJava.lang.ObjectJava.lang.errorJava.lang.exceptionErrors…Exceptions…

Exception子类的继承关系ExceptionClassNotFoundExceptionClassNotSupportedExceptionIllegalAccessExceptionInstantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticException:算术运算产生的异常ArrayStoreException:存入数组的内容数据类型不一致所产生ClassCastException:类对象强迫转换造成不当类对象所产生IllegalArgumentException:程序调用时返回错误自变量的数据类型IllegalThreadStateExceptionNumberFormatExceptionException子类(续)IllegalMonitorStateExceptionIndexOutOfBoundsException:索引超出范围所产生ArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsExceptionNegativeArraySizeException:负值索引所产生NullPointerException:对象引用参考值为null所产生SecurityException

:违反安全所产生的异常公共异常Java预定义了一些常见异常,最常用到的有如下几个。(1)ArithmeticException

整数除法中,如果除数为0,则发生该类异常,如:

inti=12/0;(2)

NullPointerException

如果一个对象还没有实例化,那么访问该对象或调用它的方法将导致NullPointerException异常如:

imageim[]=newimage[4]; System.out.println(im[0].toString())(3)NegativeArraySizeException

数组的元素个数应是一个大于等于0的整数。创建数组时,如果元素个数是个负数,则会引发NegativeArraySizeException异常。(4)ArrayIndexOutOfBoundsExceptionJava

把数组看作是对象,并用length变量记录数组的大小。访问数组元素时,运行时环境根据length值检查下标的大小。如果数组下标越界,则将导致ArrayIndexOutOfBoundsException异常。(5)SecurityException

该类异常一般在浏览器内抛出。若Applet试图进行下述操作,则由SecurityManager类抛出此异常:访问本地文件。打开一个套接口,而不是返回到提供Applet的主机。在运行时环境中运行另一个程序。

除此之外,常见异常还有:

ArrayStoreException:程序试图存取数组中错误的数据类型。

FileNotFoundException:试图存取一个并不存在的文件。

IOException:通常的I/O错误。异常分类在Java中主要有三类异常。Java定义了类java.lang.Throwable,它是使用异常处理机制可被抛出并捕获的所有异常对象的父类。它有三个基本子类异常分类ExceptionErrorRuntimeExceptionThrowableException类的主要方法publicException();publicException(Strings);publicStringtoString();publicStringgetMessage();异常示例publicclassHelloWorld

{ publicstaticvoidmain(Stringargs[]){

inti=0; Stringgreetings[]={"Helloworld!", "No,Imeanit!","HELLOWORLD!!" }; while(i<4){ System.out.println(greetings[i]); i++; } }}程序输出如下所示:

javaHelloWorld

HelloWorld!No,Imeanit!HELLOWORLD!!java.lang.ArrayIndexOutOfBoundsExcepiton:3atHelloWorlds.main(HelloWorld.java:12)9.1Java异常处理机制9.2异常处理方式9.2异常处理方法

异常处理的方法有两种:使用try…catch…finally结构对异常进行捕获和处理;通过throws和throw抛出异常。

1try…catch…finally结构在Java中,可以通过try…catch…finally结构对异常进行捕获和处理,其形式如下:try{

可能出现异常的程序代码}catch(异常类名1异常对象名1){异常类名1对应的异常处理代码}catch(异常类名2异常对象名2){异常类名2对应的异常处理代码}┇[finally{必须执行的代码}]说明将可能发生异常的程序代码放置在try程序块中。程序运行过程中,如果该块内的代码没有出现任何异常,后面的各catch块不起任何作用。但如果该块内的代码出现了异常,系统将终止try块代码的执行,自动跳转到所发生的异常类对应的catch块中,执行该块中的代码。其中的finally块是个可选项,如果含有finally块,无论异常是否发生,finally块的代码必定执行。一个try块可以对应多个catch块,用于对多个异常类进行捕获。Java实例——捕获数组下标越界异常publicclassException1{publicstaticvoidmain(Stringargs[]){try{

inta[]={1,2,3,4,5},sum=0;for(inti=0;i<=5;i++)sum=sum+a[i];System.out.println("sum="+sum);System.out.println("Successfully!");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("ArrayIndexOutOfBoundsException

detected");}finally{System.out.println("ProgrammFinished!");}}}例--捕获算术异常publicclassException2{publicstaticvoidmain(Stringargs[]){try{

intx,y;x=15;y=0;System.out.println(x/y);System.out.println("Computingsuccessfully!");}catch(ArithmeticExceptione){System.out.println("ArithmeticException

catched

!");

System.out.println("Exceptionmessage:"+e.toString());}finally{System.out.println("Finallyblock.");}}2抛出异常通常情况下,异常是由系统自动捕获的。但程序员也可以自己通过throw语句抛出异常。throw语句的格式为:

thrownew异常类名(信息)其中异常类名为系统异常类名或用户自定义的异常类名,“信息”是可选信息。如果提供了该信息,toString()方法的返回值中将增加该信息内容。

抛出异常语句Java实例——抛出多个异常publicclassException3{publicstaticintSum(intn){if(n<0)thrownewIllegalArgumentException("n应该为正整数!");

ints=0;for(inti=0;i<=n;i++)s=s+i;returns;}

publicstaticvoidmain(Stringargs[]){try{

intn=Integer.parseInt(args[0]);System.out.println(Sum(n));}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("命令行为:"+"javaException3<number>");}catch(NumberFormatExceptione2){System.out.println("参数<number>应为整数!");}catch(IllegalArgumentExceptione3){System.out.println("错误参数:"+e3.toString());}finally{System.out.println("程序结束!");}}}在有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用该方法的其他方法来捕获该异常,这时就要用到throws子句。其格式如下:

返回值类型名方法名([参数表])throws异常类型名

{

声明部分语句部分

}抛出异常选项例--抛出异常的方法publicclassException4{publicstaticintSum()throwsNegativeArraySizeException

{

ints=0;

intx[]=newint[-4];for(inti=0;i<4;i++){x[i]=i;s=s+x[i];}returns;}

publicstaticvoidmain(Stringargs[]){try{System.out.println(Sum());}catch(NegativeArraySizeExceptione){System.out.println("异常信息:"+e.toString());}}}3自定义异常类

自定义异常类可以通过继承Exception类来实现。其一般形式为:

class自定义异常类名extendsException{

异常类体;}Java实例——自定义异常类classOverFlowExceptionextendsException{

OverFlowException(){System.out.println("此处数据有溢出,溢出类是OverFlowException");}}publicclassException5{publicstaticintx=100000;publicstaticintmulti()throwsOverFlowException

{intaim;aim=x*x*x;if(aim>1.0E8||aim<0){thrownewOverFlowException();}elsereturnx*x;}

publicstaticvoidmain(Stringargs[]){

inty;try{y=multi();System.out.println("y="+y);}catch(OverFlowExceptione){System.out.println(e);}}}例--处理多种异常

importjavax.swing.JOptionPane;classmathExceptionextendsException{

mathException(){System.out.println("输入数据不正确");}}classException6{publicstaticStringname;publicstaticintpay;publicstaticvoidinputdata()throwsmathException

{try{name=JOptionPan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论