Java异常处理 第四章_第1页
Java异常处理 第四章_第2页
Java异常处理 第四章_第3页
Java异常处理 第四章_第4页
Java异常处理 第四章_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

Java异常处理第四章教学目标4.1Exception的概念、子类及其继承关系4.2面向对象的异常处理机制4.3创建自定义异常教学目标4.1Exception的概念、子类及其继承关系4.1.1

Exception的概念4.1.2

Exception的分类4.1.3

Exception的继承关系和层次4.1.4方法调用堆栈4.2面向对象的异常处理机制4.2.1

异常处理语句(try-catch-finally)4.2.2

在方法首部用throws抛出异常4.2.3在方法体中用throw手工抛出异常4.2.4程序示例4.3自定义异常引言在进行程序设计时,错误的产生是不可避免的,如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解决的问题。以面向过程语言-C语言为例,一般通过使用if语句来判断是否出现了错误,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的错误事件并进行处理。没有错误处理的程序:{openTheFile;determineitssize;allocatethatmuchmemory;read-filecloseTheFile;

}引言openFiles;if(theFilesOpen){determinethelengthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readFailed)errorCode=-1;elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;try{

openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}面向过程和面向对象异常处理机制对比4.1.1Exception的概念异常(Exception)是指程序运行过程中出现的可能发生会打断程序正常执行的事件或现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界、内存不足等。为了加强程序的鲁棒性(Robust),程序设计时,必须考虑到可能发生的异常(Abnormal)事件并做出相应的处理。Java提供了功能强大的面向对象异常处理机制,可以方便地在程序中监视可能发生异常的程序块,并将所有异常处理的代码集中放置在程序某处,使完成正常功能的程序代码与进行异常处理的程序代码分开,便于程序的阅读、修改和维护。4.1.1Exception的概念在Java中将异常情况分为Error和Exception两大类。Error类:指较少发生的内部系统错误,由JVM生成并抛出,包括动态链接失败、JVM内部错误、资源耗尽等严重情况,程序员无能为力,只能让程序终止。Exception类:解决由程序本身及环境所产生的异常,有补救或控制的可能,程序员也可预先防范。ThrowableErrorExceptionRuntimeExceptionIOExceptionObject4.1.1Exception的概念Throwable类:具体请参考帮助文档。构造方法:Throwable()构造方法:Throwable(Stringmessage)StringtoString():返回形如“classname”@“getMessage()”的信息。StringgetMessage():返回有关异常事件的信息。StringgetLocalizedMessage()voidprintStackTrace():用来跟踪异常事件发生时的执行堆栈的内容voidprintStackTrace(PrintStream

s)voidprintStackTrace(PrintWriters)ThrowablefillInStackTrace()4.1.2Exception的分类Java语言中Exception可以分为:检查性异常(CheckedException):一般程序中可预知的问题,其产生的例外可能会带来意想不到的结果,因此Java编译器要求Java程序必须捕获或声明所有的非运行时异常必须进行异常处理,否则编译不能通过。例如以IOException为代表的一些类如FileNotFoundException、用户连接数据库时产生的SQLException等。非检查性异常(UncheckedException):以RuntimeException为代表的一些类,编译时发现不了,只在能运行时才能发现。RuntimeException:Java虚拟机在运行时生成的例外,如被0除等系统错误、数组下标超范围等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响不太大。因此由系统检测,用户可不做处理,系统将它们交给缺省的异常处理程序(当然,必要时,用户可对其处理)。

ClassNotFoundExceptionClassNotSupportedExceptionIllegalAccessExceptionIntantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticExceptionArrayStoreExceptionIllegalArgumentExceptionIllegalThreadStateExceptionNumberFormatExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionStringIndexOutBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException4.1.2Exception的分类4.1.2Exception的分类Java程序异常处理的原则:对于Error和RuntimeException,可以在程序中进行捕获和处理,但不是必须的。对于IOException及其他异常,必须在程序进行捕获和处理,否则,程序不能通过编译。异常处理机制主要处理检查性异常。我们可以从JDK帮助文档中查找一个方法可能抛出的异常,然后有针对性的处理。例程:ZeroExceptionTest.java例程:TestIOExcption1.java说明:从当前文件夹文本文件test1.txt读出内容,输出到屏幕上。由于没有检测异常FileNotFoundException和IOException并做出处理,编译不能通过。4.1.4方法调用堆栈例程:code\MethodCallTest.java01publicclassTest{02int[]arr=newint[3];03publicstaticvoidmain(String[]args){04newTest().methodOne();05System.out.println("main");06}07publicvoidmethodOne(){08methodTwo();09System.out.println("One");10}11publicvoidmethodTwo(){12methodThree();13System.out.println("Two");14}15publicvoidmethodThree(){16System.out.println(arr[3]);17System.out.println("Three");18}19}4.1.4方法调用堆栈Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:5 atSle.methodThree(Sle.java:17) atSle.methodTwo(Sle.java:13) atSle.methodOne(Sle.java:9) atSle.main(Sle.java:5)Pressanykeytocontinue...methiodThree()methiodTwo()methiodOne()main()教学目标4.1Exception的概念、子类及其继承关系4.1.1

Exception的概念4.1.2

Exception的分类4.1.3

Exception的继承关系和层次4.1.4方法调用堆栈4.2面向对象的异常处理机制4.2.1

异常处理语句(try-catch-finally)4.2.2

在方法首部用throws抛出异常4.2.3在方法体中用throw手工抛出异常4.2.4程序示例4.3自定义异常4.2面向对象的异常处理机制异常处理的方法:使用try…catch…finally结构对异常进行捕获和处理。在方法声明首部用throws声明抛出异常:JVM将类载入内存,调用main()类的入口方法,main()方法调用其它方法。异常处理机制采用谁调用,谁就负责处理被调用方法抛出的异常。在方法体中用throw手工抛出异常。4.2.1

异常处理语句(try-catch-finally)1.try…catch…finally结构语法格式:try{......//codethatmightgenerateexception}catch(type1id1){......//handleexceptionoftype1}catch(type2id2){......//handleexceptionoftype2}[finally{//activitiesthathappeneverytime}]4.2.1

异常处理语句(try-catch-finally)finally{}的语句块无论异常是否发生都要执行,是try…catch的统一出口,一般用来处理“善后处理”,例如释放资源,关闭使用完的文件等。一个try语句块可对应多个catch块,用于对多个异常类进行捕获。如果要捕获的异常类之间有父子继承关系时,应该将子类的catch块放置在父类的catch块之前。例程:TestIOExcption2.java说明:使用try...catch…finally结构处理异常。4.2.1

异常处理语句(try-catch-finally)try块finally块发生异常无异常通常在finally块中编写将资源返还给系统的语句,它一般包括:释放动态分配的内存块关闭文件关闭数据库结果集关闭与数据库建立的连接catch块……catch块4.2.2

在方法首部用throws声明抛出异常2.throws声明抛出异常:如果一个方法没有捕获可能引发的异常,调用该方法的其他方法应该捕获并处理该异常。这就需要声明方法的时候,使用throws选项,以抛出该异常。语法格式:<modifiers><return_type><name>([<argu_list>])throwsException{[<statements>]}例程:TestIOExcption3.java说明:在main()方法定义首部声明抛出异常FileNotFoundException,IOException,谁调用谁处理。例程:TestIOExcption4.java说明:将功能进行划分,main()只负责测试,readFile()负责从指定文件中读出内容并输出到方法定义时抛出异常。FileNotFoundException,IOException,谁调用谁处理,这里main()调用readFile()。4.2.3在方法体中用throw手工抛出异常3.throw抛出异常,可以是系统定义的异常,也可以是用户自定义的异常。语法格式:thrownew<ExceptionClassName>([实参表])教学目标4.1Exception的概念、子类及其继承关系4.1.1

Exception的概念4.1.2

Exception的分类4.1.3

Exception的继承关系和层次4.1.4方法调用堆栈4.2面向对象的异常处理机制4.2.1

异常处理语句(try-catch-finally)4.2.2

在方法首部用throws抛出异常4.2.3在方法体中用throw手工抛出异常4.2.4程序示例4.3自定义异常4.3创建自定义异常Java语言允许用户在需要时创建自己的异常类型,用于表述JDK中未包括的其他异常情况。这些类型必须继承Thowable或其子类,一般继承Exc

温馨提示

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

评论

0/150

提交评论