第09章-异常处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

11.异常和异常类2.异常处理3.创建异常第九章异常处理2软件程序肯定会发生错误/问题从外部问题(硬盘、网络故障等)到编程错误(数组越界、引用空对象等)致命错误内存空间不足等错误(Error)导致程序异常中断程序不能简单地恢复执行非致命错误数组越界等异常(Exception)导致程序中断执行程序在修正后可恢复执行异常(Exception)3Java语言中已定义或用户定义的某个异常类的对象一个异常类代表一种异常事件Java语言利用异常来使程序获得处理错误的能力(error-handling)异常事件(ExceptionalEvent)每当Java程序运行过程中发生了一个可识别的运行错误时,系统都会产生一个相应的该异常类的对象,即产生一个该错误的异常即“抛出异常”,运行系统“捕获”该异常并交由程序代码处理。异常4Java语言中用来处理异常的类异常类的方法构造方法publicException()publicException(Strings)常用方法publicStringtoString()publicStringgetMessage()publicvoidprintStackTrace()异常类5对异常的定义Java语言中定义的异常类:IOException/NullPointerException详细定义见Java文档中各个包的ExceptionSummary用户定义自已所需的异常类,描述程序中出现的异常结果第10讲异常(Exception)classjava.lang.Throwableclassjava.lang.Error(严重的问题,但不需程序捕捉的错误)classjava.lang.LinkageError......classjava.lang.VirtualMachineErrorclassjava.lang.InternalErrorclassjava.lang.OutOfMemoryError......classjava.lang.Exception(程序应该捕捉的错误)classjava.lang.ClassNotFoundExceptionclassjava.lang.RuntimeException(JVM正常运行时抛出的错误)classjava.lang.ArithmeticException......classjava.io.IOExceptionclassjava.awt.AWTExceptionclassjava.sql.SQLException......6运行时异常:程序运行时自动对某些错误作出反应而产生的,不处理也可以通过编译、但运行时才产生。这类异常应该通过调试尽量避免,而不去捕获。如:ArithmeticException、NullPointerException、IndexOutOfBoundsException、ClassCastException7非运行时异常:在程序运行过程中由环境原因造成的如I/O异常,如网络地址打不开、文件未找到等,这类异常就必须捕获,否则编译通不过。其中异常处理中经常要做的就是I/O异常的处理。程序对错误与异常的处理方式有三种:1、程序不能处理的错误2、程序应避免而可以不去捕获的运行时异常3、必须捕获的非运行时异常81.异常和异常类2.异常处理3.创建异常第六章异常处理9当一个Java程序的方法产生一个错误,该方法创造一个异常对象并将其交给运行系统InJavaterminology,creatinganexceptionobjectandhandingittotheruntimesystemiscalledthrowinganexception(抛出异常)运行系统从错误发生处开始寻找处理错误的程序段Theexceptionhandlerchosenissaidtocatchtheexception(捕获异常)捕获异常的过程可以沿方法调用的逆向顺序寻找异常处理10异常处理器(exceptionhandler)trycatchfinally异常的抛出(throw)异常处理111】异常的产生下面通过一个例子来看一下异常从产生到捕获并处理的过程.122020/2/2912当一个异常类的对象被捕获或接收后,用户程序就会发生流程跳转,系统终止当前的流程而跳转到专门的异常处理语句块,或直接跳出当前程序和java虚拟机回到操作系统。132020/2/2913在Java的异常处理机制中,提供了try-catch-finally语句来捕获和处理一个或多个异常,其语法格式如下:try{要检查的语句序列}catch(异常类名形参对象名){异常发生时的处理语句序列}finally{一定会运行的语句序列}142020/2/2914catch块紧跟在try块的后面,用来接收try块可能产生的异常,一个catch语句块通常会用同样方式来处理它所接收到的所有异常,但是实际上一个try块可能产生多种不同的异常,如果希望能采取不同的方法来处理这些不同的异常,就需要使用多异常处理机制。152020/2/2915【例9.2】使用try-catch-finally语句对例9.1中产生的异常进行捕获与处理。//app9_2.java异常的捕获与处理publicclassapp9_2{publicstaticvoidmain(Stringargs[]){inti;inta[]={1,2,3,4};for(i=0;i5;i++){try{System.out.print(“a[”+i+”]/”+i+”=”+(a[i]/i));}catch(ArrayIndexOutOfBoundsExceptione){System.out.print(“捕获到了数组下标越界异常”);}162020/2/29【例9.2】续catch(ArithmeticExceptione){System.out.print(“异常类名称是:”+e);//显示异常信息}catch(Exceptione){System.out.println(“捕获”+e.getMessage()+”异常!”);//显示异常信息}finally{System.out.println(“finallyi=”+i);}}System.out.println(“继续!!”);}}172020/2/2917程序运行结果为:异常类名称是:java.lang.ArithmeticException:/byzerofinallyi=0a[1]/1=2finallyi=1a[2]/2=1finallyi=2a[3]/3=1finallyi=3捕获到了数组下标越界异常finallyi=4继续!!18异常处理器(exceptionhandler)try程序块构造一个异常处理器,封装一些抛出异常的语句try{Java语句块;//指一个或多个抛出异常的Java语句}异常(Exception)classTest{publicstaticvoidmain(Stringargs[]){charc=(char)System.in.read();System.out.println(c);}}importjava.io.IOException;classTest{publicstaticvoidmain(Stringargs[]){try{charc=(char)System.in.read();System.out.println(c);}catch(IOExceptione){System.out.println(e);}}}一个try语句必须带有至少一个catch语句块或一个finally语句块19异常处理器(exceptionhandler)try语句块定义了异常处理器的范围catch语句块捕捉try语句块抛出的异常try{//Codethatmightgenerateexceptions}catch(Type1id1){//HandleexceptionsofType1}catch(Type2id2){//HandleexceptionsofType2}catch(Type3id3){//HandleexceptionsofType3}//etc...异常处理importjava.io.IOException;classTest{publicstaticvoidmain(Stringargs[]){try{charc=(char)System.in.read();System.out.println(c);}catch(IOExceptione){System.out.println(e);}}}try{...}catch(ArrayIndexOutOfBoundsExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}20异常处理器(exceptionhandler)finally语句块There’softensomepieceofcodethatyouwanttoexecutewhetherornotanexceptionisthrownwithinatryblock.finally语句块在异常处理中是必须执行的语句块清理现场关闭打开的文件关闭网络连接异常处理try{//Theguardedregion:Dangerousactivities//thatmightthrowA,B,orC}catch(Aa1){//HandlerforsituationA}catch(Bb1){//HandlerforsituationB}catch(Cc1){//HandlerforsituationC}finally{//Activitiesthathappeneverytime}21异常的抛出在一个方法中,抛出异常,同时捕捉当有多个方法调用时,由特定(适当)的方法捕捉异常被调用的方法主动抛出异常(throws)异常处理importjava.io.IOException;classTest{staticchargetChar()throwsIOException{charc=(char)System.in.read();returnc;}publicstaticvoidmain(Stringargs[]){try{charc=getChar();System.out.println(c);}catch(IOExceptione){System.out.println(e);}}}22异常的抛出主动抛出异常异常处理voidparseObj(Strings)throwsNullPointerException{if(s==null)thrownewNullPointerException();……;}23异常的抛出由方法抛出异常交系统处理:对于程序中无法处理必须交由系统处理的异常,由于系统直接调用的是主方法main(),所以可以在主方法中使用throws子句声明抛出异常交由系统处理。异常处理importjava.io.*;publicclassTest{publicstaticvoidmain(Stringargs[])throwsIOException{FileInputStreamfis=newFileInputStream(“autoexec.bat”);}}24IOException类的异常处理直接由主方法main()抛出异常,让JAVA默认的异常处理机制来处理。在程序代码内编写try-catch语句捕获异常,如此则不用指定main()throwsIOException抛出异常了。既在main()方法的后面使用throws抛出异常,也可以在程序中使用try-catch捕获异常。251.异常和异常类2.异常处理3.创建异常第

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功