java的异常处理_第1页
java的异常处理_第2页
java的异常处理_第3页
java的异常处理_第4页
java的异常处理_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、JavaJava的异常处理的异常处理0程序中的错误可分为三类:n编译错误、逻辑错误和运行时错误。编译错误、逻辑错误和运行时错误。 编译错误编译错误是由于没有遵循是由于没有遵循Java语言的语语言的语法规则而产生的,这种错误要在编译阶段排法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行。除,否则程序不可能运行。 逻辑错误逻辑错误是指程序编译正常,也能运行,是指程序编译正常,也能运行,但结果不是人们所期待的。但结果不是人们所期待的。1 运行时错误运行时错误是指程序运行过程中出现是指程序运行过程中出现了一个不可能执行的操作,就会出现运行了一个不可能执行的操作,就会出现运行时错误,运行时错

2、误有时也可以由逻辑错时错误,运行时错误有时也可以由逻辑错误引起。误引起。 异常处理异常处理的主要目的是即使在程序运的主要目的是即使在程序运行时发生了错误,也要保证程序能正常结行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中束,避免由于错误而使正在运行的程序中途停止。途停止。2什么是异常?l异常处理机制异常处理机制是是JAVAJAVA语言的重要特征之一。通过异常处语言的重要特征之一。通过异常处理机制理机制可防止程序执行期间因出现错误而造成可防止程序执行期间因出现错误而造成不可预料的结果。不可预料的结果。l一个好的应用程序,除了具备用户要求的功能外,一个好的应用程序,除了具

3、备用户要求的功能外,还要求还要求能预见程序执行过程中可能产生的各种异常,能预见程序执行过程中可能产生的各种异常,并把处理异常的功能包括在用户程序中。并把处理异常的功能包括在用户程序中。3n异常是异常是程序执行期间程序执行期间发生的各种意外或错误。发生的各种意外或错误。比如说: 用户输入出错 所需文件找不到 运行时磁盘空间不够 内存不够 算术运算错 (数的溢出,被零除) 数组下标越界 4在在Java程序运行过程中,产生的异常通常有三种类型:程序运行过程中,产生的异常通常有三种类型:q一是一是JAVA虚拟机由于某些内部错误产生的异常,这虚拟机由于某些内部错误产生的异常,这类异常不在用户程序的控制之

4、内,也不需要用户处类异常不在用户程序的控制之内,也不需要用户处理这类异常;理这类异常;q二是标准异常类,由二是标准异常类,由java系统预先定义好的。这类系统预先定义好的。这类异常是由程序代码中的错误而产生的,如:以零为异常是由程序代码中的错误而产生的,如:以零为除数的除法,访问数组下标范围以外的数组元素,除数的除法,访问数组下标范围以外的数组元素,访问空对象内的信息,这是需要用户程序处理的异访问空对象内的信息,这是需要用户程序处理的异常。常。q三是根据需要在用户程序中自定义的一些异常类。三是根据需要在用户程序中自定义的一些异常类。5lJavaJava中所有的异常都是用类表示的,在中所有的异常

5、都是用类表示的,在JAVAJAVA中预定义中预定义了很多异常类,每个代表了一种类型的运行错误。当了很多异常类,每个代表了一种类型的运行错误。当程序发生异常时,会生成某个异常类的对象。程序发生异常时,会生成某个异常类的对象。lJavaJava解释器可以监视程序中发生的异常,如果程序中解释器可以监视程序中发生的异常,如果程序中产生的异常与系统中预定义某个异常类相对应,系统产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,就可以用相应的机就自动产生一个该异常类的对象,就可以用相应的机制处理异常,确保程序能够安全正常地继续运行。制处理异常,确保程序能够安全正常地继续运行。l异

6、常对象中含有这种运行错误的信息和异常发生时程异常对象中含有这种运行错误的信息和异常发生时程序的运行状态。序的运行状态。6二、二、JavaJava中标准异常类的层次结构中标准异常类的层次结构 针对各种类型的异常,针对各种类型的异常,JavaJava定义了许多定义了许多标准异常类标准异常类,所有的,所有的JavaJava异常类都是系统类异常类都是系统类库中的库中的ExceptionException类的子类,它们分布在类的子类,它们分布在java.langjava.lang、java.iojava.io、java.utiljava.util和和包中。每个异常类对应一种特定的包中。每个异常类对应一种

7、特定的运行错误,各个异常类采用继承的方式进行运行错误,各个异常类采用继承的方式进行组织。异常类的层次结构图如下图所示:组织。异常类的层次结构图如下图所示:7JavaJava中异常类的结构:中异常类的结构:Throwable类类Error类类ExceptionException类类 RuntimeException类类ArithmeticException类类IndexOutofBoundException类类ArrayIndexOutofBoundsException类类IoException类类FileNotFoundException类类EOFException类类在在Java.lang包

8、包在在Java.io包包8uThrowableThrowable类类有两个直接子类:有两个直接子类: ErrorError(致(致命错误)命错误) 和和ExceptionException(异常)。(异常)。uErrorError类型类型的异常与的异常与JAVAJAVA虚拟机本身发生的虚拟机本身发生的错误有关,这类异常由错误有关,这类异常由javajava直接处理,用直接处理,用户程序一般不能太做什么,只能等待系统户程序一般不能太做什么,只能等待系统通知用户关闭程序。通知用户关闭程序。u用户程序产生的错误由用户程序产生的错误由ExceptionException的子类表的子类表示。用户程序应该

9、处理这类异常。示。用户程序应该处理这类异常。9、ThrowableThrowable类类u 该类属于该类属于Java.lang包,是所有异常包,是所有异常类的父类在类的父类在Throwable类中定义了描类中定义了描述异常发生的位置和所有异常类共同需述异常发生的位置和所有异常类共同需要的内容要的内容10Throwable类的构造函数(1) public Throwable() 以以nullnull作为错误信息串内容创建作为错误信息串内容创建ThrowableThrowable对象,同时对象,同时调用该对象的另一方法调用该对象的另一方法fillInStackTracefillInStackTra

10、ce记录异常发生的位记录异常发生的位置。置。 (2) public Throwable(String message)以以message的内容作为错误信息串创建的内容作为错误信息串创建Throwable对象,同时调对象,同时调用该对象的另一方法用该对象的另一方法fillInStackTrace。11Throwable类的主要成员函数 如果创建当前对象时以如果创建当前对象时以message的内容作为错误信息串,本方法的内容作为错误信息串,本方法返回串变量返回串变量message的内容;若创建当前对象时未使用参数则返的内容;若创建当前对象时未使用参数则返回回null。(1) public Stri

11、ng getMessage()(2) public String toString()若当前对象包含错误信息,本方法返回的字符串由三部分组成:若当前对象包含错误信息,本方法返回的字符串由三部分组成:当前对象的类名,一个冒号和一个空格,错误信息的字符串;当前对象的类名,一个冒号和一个空格,错误信息的字符串;若当前对象未包含错误信息则仅返回当前对象的类名。若当前对象未包含错误信息则仅返回当前对象的类名。12Throwable类的主要成员函数(续)将跟踪栈中的信息输出,输出的第一行是当前对象将跟踪栈中的信息输出,输出的第一行是当前对象toString( )的的返回值,其余各行是跟踪栈中的信息。返回值

12、,其余各行是跟踪栈中的信息。 (3) public void printStackTrace()(4) public Trowable fillInStackTrace()将当前异常对象的发生位置将当前异常对象的发生位置 (类、方法和所在文件的行号类、方法和所在文件的行号) 记录记录到跟踪栈对象中。到跟踪栈对象中。13 Error类是类是Throwable类的子类,由系统保留,类的子类,由系统保留,用户不能使用。也就是说,用户不能使用。也就是说, Error类型的错误不允类型的错误不允许用户插手处理,由许用户插手处理,由Java系统自行处理。系统自行处理。qErrorError类描述系统错误:

13、如将字节码装入内存的过类描述系统错误:如将字节码装入内存的过程中和对字节码进行检查的过程中遇到的问题、程中和对字节码进行检查的过程中遇到的问题、javajava的内部错误、资源耗尽的情况。的内部错误、资源耗尽的情况。q这类异常由这类异常由javajava直接处理,用户程序不要理会这类直接处理,用户程序不要理会这类异常。异常。、ErrorError类类14 Exception类是类是Throwable类的子类,用户程序中可以直类的子类,用户程序中可以直接使用接使用Exception类处理类处理Exception类型的异常。类型的异常。Exception类不仅继承了类不仅继承了Throwable类

14、的方法,同时定义以下两个构造函类的方法,同时定义以下两个构造函数:数: public Exception() public Exception(String s) 说明:说明: 字符串字符串s用来接收传入的字符串信息,该信息通常是用来接收传入的字符串信息,该信息通常是 对错误的描述。对错误的描述。3 3、ExceptionException类类15异常程序举例:异常程序举例:/java直接处理运行时异常直接处理运行时异常class TestSystemException public static void main(String args) intnum =new int2; for(int

15、 i=1;i4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(After throw ArrayIndexOutOfBoundsException); 23Throw语句举例3class Throw_Exp3 public static void main(String args) int a=5,b=0,c=1,2,3,4,5; System.out.println(Before throw); if(b=0) throw (new ArithmeticException (); System.out.pri

16、ntln(a/b); if(a4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(a/b); 24五、捕捉异常五、捕捉异常 在前面给出的例子中,由于程序中都没有给出处理在前面给出的例子中,由于程序中都没有给出处理异常的代码,因此抛出的异常都被异常的代码,因此抛出的异常都被Java运行系统捕捉,运行系统捕捉,由由Java运行系统进行相应处理。一般来说,在设计程运行系统进行相应处理。一般来说,在设计程序过程中,如果能够预测程序中可能发生序过程中,如果能够预测程序中可能发生 的异常,则的异常,则应在程序中给出处理代码。

17、而不交给应在程序中给出处理代码。而不交给Java运行系统处运行系统处理,对于程序中那些不能预测的异常,可交给理,对于程序中那些不能预测的异常,可交给Java运运行行 系统处理。系统处理。 要由程序自己捕捉和处理异常,需要建立要由程序自己捕捉和处理异常,需要建立try - catch-finally语句块。语句块。25try try - - catchcatch语句块格式:语句块格式:try /在此区域内或能发生异常在此区域内或能发生异常; catch(异常类异常类1 e1) /处理异常处理异常1; catch(异常类异常类n en) /处理异常处理异常n; finally /不论异常是否发生不

18、论异常是否发生,都要执行的部分都要执行的部分; 被监视的块被监视的块该该catch子句能够捕捉子句能够捕捉和处理的异常类型和处理的异常类型26(1 1)将可能发生异常的程序代码放置在)将可能发生异常的程序代码放置在trytry程序块中。如果程序块中。如果该块内的代码出现了异常,系统将终止该块内的代码出现了异常,系统将终止trytry块代码的执行,块代码的执行,自动跳转到所发生的异常类对应的自动跳转到所发生的异常类对应的catchcatch块中,执行该块中块中,执行该块中的代码。如果程序运行正常,后面的各的代码。如果程序运行正常,后面的各catchcatch块不起任何作块不起任何作用。用。(2

19、2)finallyfinally块是个可选项,无论异常是否发生,块是个可选项,无论异常是否发生,finallyfinally块块的代码必定执行。通常把对各种异常共同处理部分放在的代码必定执行。通常把对各种异常共同处理部分放在finallyfinally块中,如输出统一信息、释放资源、清理内存、关块中,如输出统一信息、释放资源、清理内存、关闭已打开的文件等。闭已打开的文件等。(3 3)一个)一个trytry块可以对应多个块可以对应多个catchcatch块,用于对多个异常类进块,用于对多个异常类进行捕获。但最多只能选中一个执行。行捕获。但最多只能选中一个执行。(4 4)异常对象与)异常对象与ca

20、tchcatch块中声明的实例的匹配原则:块中声明的实例的匹配原则:异常对象是异常对象是catchcatch块中声明的异常类的实例块中声明的异常类的实例; ;异常对象是异常对象是catchcatch块中声明的异常类的某一子类的实例块中声明的异常类的某一子类的实例; ;Try-catch-finally结构说明:27try - catch-finally语句举例1class Try_Catch_Exp1public static void main(String args) int d=0,a; try System.out.println(Before throw Exception); a=

21、5/d; System.out.println(the Exception is throw,The statement ist run); catch(ArithmeticException e) System.out.println(处理算数异常的处理算数异常的catch语句块捕获了异常!语句块捕获了异常!); System.out.println(捕获的异常为捕获的异常为+e); catch(ArrayIndexOutOfBoundsException e) System.out.println(处理数组下标越异常的处理数组下标越异常的catch语句块捕获了异常!语句块捕获了异常!);

22、System.out.println(捕获的异常为捕获的异常为+e); finally System.out.println(这是所有这是所有catch块的共有部分!块的共有部分!); System.out.println(try-catch-finally块后面的语句块后面的语句); 28try - catch-finally语句举例2class Try_Catch_Exp2 public static void main(String args) int a=5,b=0,c=1,2,3,4,5; try System.out.println(Before throw); if(a4) th

23、row (new ArrayIndexOutOfBoundsException(); System.out.println (After throw); catch(ArrayIndexOutOfBoundsException e) System.out.println(处理数组下标越异常的处理数组下标越异常的catch语句块捕获了语句块捕获了异常!异常!); System.out.println(捕获的异常为捕获的异常为+e); finally System.out.println(这是所有这是所有catch块的共有部分!块的共有部分!); System.out.println(try-ca

24、tch-finally块后面的语句块后面的语句); 29程序设计举例:n求三角形的面积或周长。注意:三角形的三条边通过键盘输入,输入的数值构不成三角形的话,需要重新输入。30六、用户自定义的异常类 尽管尽管JavaJava提供了很多异常类,但用户还是可以根据需要定义提供了很多异常类,但用户还是可以根据需要定义自己的异常类,即创建自定义异常类。自己的异常类,即创建自定义异常类。 说明:说明:(1 1)用户自定义的异常类必须是)用户自定义的异常类必须是ThrowableThrowable类或类或ExceptionException类类的子类。的子类。(2 2)自定义的异常类,一般只要声明两个构造方

25、法,一个是)自定义的异常类,一般只要声明两个构造方法,一个是不用参数的,另一个以字符串为参数。作为构造方法参数的不用参数的,另一个以字符串为参数。作为构造方法参数的字符串应当反映异常的信息。字符串应当反映异常的信息。31其一般形式为:其一般形式为:class 自定义异常类名自定义异常类名 extends Exception 异常类体异常类体;用户自定义的异常类格式:32用户自定义的异常类说明:u自定义异常类自定义异常类class MyException extends Exception u用户定义的异常同样要用用户定义的异常同样要用try-catch捕获捕获,但必须由但必须由用户自己抛出用户

26、自己抛出 throw new MyException().33用户自定义的异常类举例:class Exception_exppublic static void main(String args)try System.out.println(2+3=+add(2,3); System.out.println(-8+10=+add(-8,10);catch (Exception e) System.out.println(Exception is +e); static int add(int n,int m) throws UserException if (n0| m0) throw new UserException(); return n+m; class UserException extends ExceptionUserException()super(数据为负数数据为负数);34七、常见的系统预定义编译异常七、常见的系统预定义编译异常在包在包java.langjava.lang中声明的标准查检型(编译时发现)异常:中声明的标准查检型(编译时发现)异常:(1) ClassNotFoundException(1) ClassNotFoundException 指定名字的类或接口未找

温馨提示

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

评论

0/150

提交评论