您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > java的异常处理.
0Java的异常处理1程序中的错误可分为三类:编译错误、逻辑错误和运行时错误。编译错误是由于没有遵循Java语言的语法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行。逻辑错误是指程序编译正常,也能运行,但结果不是人们所期待的。2运行时错误是指程序运行过程中出现了一个不可能执行的操作,就会出现运行时错误,运行时错误有时也可以由逻辑错误引起。异常处理的主要目的是即使在程序运行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中途停止。3什么是异常?异常处理机制是JAVA语言的重要特征之一。通过异常处理机制可防止程序执行期间因出现错误而造成不可预料的结果。一个好的应用程序,除了具备用户要求的功能外,还要求能预见程序执行过程中可能产生的各种异常,并把处理异常的功能包括在用户程序中。4异常是程序执行期间发生的各种意外或错误。比如说:①用户输入出错②所需文件找不到③运行时磁盘空间不够④内存不够⑤算术运算错(数的溢出,被零除…)⑥数组下标越界......5在Java程序运行过程中,产生的异常通常有三种类型:一是JAVA虚拟机由于某些内部错误产生的异常,这类异常不在用户程序的控制之内,也不需要用户处理这类异常;二是标准异常类,由java系统预先定义好的。这类异常是由程序代码中的错误而产生的,如:以零为除数的除法,访问数组下标范围以外的数组元素,访问空对象内的信息,这是需要用户程序处理的异常。三是根据需要在用户程序中自定义的一些异常类。6Java中所有的异常都是用类表示的,在JAVA中预定义了很多异常类,每个代表了一种类型的运行错误。当程序发生异常时,会生成某个异常类的对象。Java解释器可以监视程序中发生的异常,如果程序中产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,就可以用相应的机制处理异常,确保程序能够安全正常地继续运行。异常对象中含有这种运行错误的信息和异常发生时程序的运行状态。7二、Java中标准异常类的层次结构针对各种类型的异常,Java定义了许多标准异常类,所有的Java异常类都是系统类库中的Exception类的子类,它们分布在java.lang、java.io、java.util和java.net包中。每个异常类对应一种特定的运行错误,各个异常类采用继承的方式进行组织。异常类的层次结构图如下图所示:8Java中异常类的结构:Throwable类Error类Exception类……RuntimeException类ArithmeticException类IndexOutofBoundException类ArrayIndexOutofBoundsException类……IoException类FileNotFoundException类EOFException类……在Java.lang包在Java.io包9Throwable类有两个直接子类:Error(致命错误)和Exception(异常)。Error类型的异常与JAVA虚拟机本身发生的错误有关,这类异常由java直接处理,用户程序一般不能太做什么,只能等待系统通知用户关闭程序。用户程序产生的错误由Exception的子类表示。用户程序应该处理这类异常。101、Throwable类该类属于Java.lang包,是所有异常类的父类.在Throwable类中定义了描述异常发生的位置和所有异常类共同需要的内容.11Throwable类的构造函数(1)publicThrowable()以null作为错误信息串内容创建Throwable对象,同时调用该对象的另一方法fillInStackTrace记录异常发生的位置。(2)publicThrowable(Stringmessage)以message的内容作为错误信息串创建Throwable对象,同时调用该对象的另一方法fillInStackTrace。12Throwable类的主要成员函数如果创建当前对象时以message的内容作为错误信息串,本方法返回串变量message的内容;若创建当前对象时未使用参数则返回null。(1)publicStringgetMessage()(2)publicStringtoString()若当前对象包含错误信息,本方法返回的字符串由三部分组成:当前对象的类名,一个冒号和一个空格,错误信息的字符串;若当前对象未包含错误信息则仅返回当前对象的类名。13Throwable类的主要成员函数(续)将跟踪栈中的信息输出,输出的第一行是当前对象toString()的返回值,其余各行是跟踪栈中的信息。(3)publicvoidprintStackTrace()(4)publicTrowablefillInStackTrace()将当前异常对象的发生位置(类、方法和所在文件的行号)记录到跟踪栈对象中。14Error类是Throwable类的子类,由系统保留,用户不能使用。也就是说,Error类型的错误不允许用户插手处理,由Java系统自行处理。Error类描述系统错误:如将字节码装入内存的过程中和对字节码进行检查的过程中遇到的问题、java的内部错误、资源耗尽的情况。这类异常由java直接处理,用户程序不要理会这类异常。2、Error类15Exception类是Throwable类的子类,用户程序中可以直接使用Exception类处理Exception类型的异常。Exception类不仅继承了Throwable类的方法,同时定义以下两个构造函数:publicException()publicException(Strings)说明:字符串s用来接收传入的字符串信息,该信息通常是对错误的描述。3、Exception类16异常程序举例://java直接处理运行时异常classTestSystemException{publicstaticvoidmain(String[]args){intnum[]=newint[2];for(inti=1;i3;i++){num[i]=i;System.out.println(“num[”+i+”]=”+i);}}}该程序产生的输出见程序的运行.17Java对异常的处理涉及两方面的内容:一是抛出(throw)异常二是捕捉(catch)异常如果程序在运行过程中出现了运行错误,并且产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,这个过程称为抛出(throw)异常。当有异常对象抛出时,将在程序中寻找处理这个异常的代码,如果找到处理代码,则把异常对象交给该段代码进行处理,这个过程称为捕捉(catch)异常。如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。默认的处理方式是:首先显示描述异常信息的字符串,然后终止程序的运行。三、异常的处理机制18四、异常的抛出(throw)抛出异常有两种方式:由系统自动抛出和利用抛出语句抛出。1由系统自动抛出异常在程序运行过程中,如果出现了可被Java运行系统识别的错误,系统会自动产生与该错误相对应的异常类的对象,即自动抛出。例如上例。2人为异常抛出两种方式:①在方法头写出需要抛出的异常(利用throws语句)②在方法体内抛出异常(利用throw语句)19Throws语句抛出异常格式:修饰符返回值类型方法名([形参表])throws异常类名1,异常类名2,……{……}说明:在执行该方法的过程中,如果出现了由throws列出的异常,则可以抛出异常,并在程序中寻找处理这个异常的代码;如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。20Throws语句举例classThrows_Exp{publicstaticvoidmain(String[]args)throwsArithmeticException,ArrayIndexOutOfBoundsException{inta=4,b=0,c[]={1,2,3,4,5};System.out.println(a/b);System.out.println(c[a+1]);System.out.println(“end”);}}21Throw语句抛出异常如果需要在方法内某个位置抛出异常,可以使用Throw语句,通常将Throw语句和if语句配合使用。格式:①throw异常类对象名②throw(new异常类名());说明:执行throw语句时,程序终止执行后面的语句,在程序中寻找处理异常的代码;如果程序中没有给出处理代码,则把异常交给Java运行系统处理。22Throw语句举例1classThrow_Exp1{publicstaticvoidmain(String[]args){ArithmeticExceptione=newArithmeticException();inta=4,b=0;System.out.println(“BeforeArithmeticException”);if(b==0)throwe;System.out.println(a/b);}}23Throw语句举例2classThrow_Exp2{publicstaticvoidmain(String[]args){inta=5,c[]={1,2,3,4,5};System.out.println(“BeforethrowArrayIndexOutOfBoundsException”);if(a4)throw(newArrayIndexOutOfBoundsException());System.out.println(“AfterthrowArrayIndexOutOfBoundsException”);}}24Throw语句举例3classThrow_Exp3{publicstaticvoidmain(String[]args){inta=5,b=0,c[]={1,2,3,4,5};System.out.println(“Beforethrow”);if(b==0)throw(newArithmeticException());System.out.println(a/b);if(a4)throw(newArrayIndexOutOfBoundsException());System.out.println(a/b);}}25五、捕捉异常在前面给出的例子中,由于程序中都没有给出处理异常的代码,因此抛出的异常都被Java运行系统捕捉,由Java运行系统进行相应处理。一般来说,在设计程序过程中,如果能够预测程序中可能发生的异常,则应在程序中给出处理代码。而不交给Java运行系统处理,对于程序中那些不能预测的异常,可交给Java运行系统处理。要由程序自己捕捉和处理异常,需要建立try-catch-finally语句块。26try-catch语句块格式:try{//在此区域内或能发生异常;}catch(异常类1e1){//处理异常1;}…catch(异常类nen){//处理异常n;}[finally{//不论异常是否发生,都要执行的部分;}]被监视的块该catch子句能够捕捉和处理的异常类型27(1)将可能发生异常的程序代码放置在try程序块中。如果该块内的代码出现了异常,系统将终止try块代码的执行,自动跳转到所发生的异常类对应的catch块中,执行该块中的代码。如果程序运行正常,后面的各catch块不起任何作用。(2)finally块是个可选项,无论异常是否发生,finally块的代码必定执行。通常把对各种异常共同处理部分放在finally块中,如输出统一信息、释放资源、清理内存、关闭已打开的文件等。(3)一个try块可以对应多个catch块,用于对多个异常类进行捕获。但最多只能选中一个执行。(4)异常对象与catch块中声明的实例的匹配原则:异常对象是catch块中声明的异常类的实例;异常对象是catch块中声明的异常类的某一子类的
本文标题:java的异常处理.
链接地址:https://www.777doc.com/doc-2881181 .html