版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0,Java的异常处理,1,程序中的错误可分为三类:,编译错误、逻辑错误和运行时错误。 编译错误是由于没有遵循Java语言的语法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行。 逻辑错误是指程序编译正常,也能运行,但结果不是人们所期待的。,2,运行时错误是指程序运行过程中出现了一个不可能执行的操作,就会出现运行时错误,运行时错误有时也可以由逻辑错误引起。 异常处理的主要目的是即使在程序运行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中途停止。,3,什么是异常?,异常处理机制是JAVA语言的重要特征之一。通过异常处理机制可防止程序执行期间因出现错误而造成不可预
2、料的结果。,一个好的应用程序,除了具备用户要求的功能外,还要求能预见程序执行过程中可能产生的各种异常,并把处理异常的功能包括在用户程序中。,4,异常是程序执行期间发生的各种意外或错误。比如说: 用户输入出错 所需文件找不到 运行时磁盘空间不够 内存不够 算术运算错 (数的溢出,被零除) 数组下标越界 ,5,在Java程序运行过程中,产生的异常通常有三种类型: 一是JAVA虚拟机由于某些内部错误产生的异常,这类异常不在用户程序的控制之内,也不需要用户处理这类异常; 二是标准异常类,由java系统预先定义好的。这类异常是由程序代码中的错误而产生的,如:以零为除数的除法,访问数组下标范围以外的数组元
3、素,访问空对象内的信息,这是需要用户程序处理的异常。 三是根据需要在用户程序中自定义的一些异常类。,6,Java中所有的异常都是用类表示的,在JAVA中预定义了很多异常类,每个代表了一种类型的运行错误。当程序发生异常时,会生成某个异常类的对象。 Java解释器可以监视程序中发生的异常,如果程序中产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,就可以用相应的机制处理异常,确保程序能够安全正常地继续运行。 异常对象中含有这种运行错误的信息和异常发生时程序的运行状态。,7,二、Java中标准异常类的层次结构,针对各种类型的异常,Java定义了许多标准异常类,所有的Java
4、异常类都是系统类库中的Exception类的子类,它们分布在java.lang、java.io、java.util和包中。每个异常类对应一种特定的运行错误,各个异常类采用继承的方式进行组织。异常类的层次结构图如下图所示:,8,Java中异常类的结构:,9,Throwable类有两个直接子类: Error(致命错误) 和Exception(异常)。 Error类型的异常与JAVA虚拟机本身发生的错误有关,这类异常由java直接处理,用户程序一般不能太做什么,只能等待系统通知用户关闭程序。 用户程序产生的错误由Exception的子类表示。用户程序应该处理这类异常。,10,、Throwable类,
5、该类属于Java.lang包,是所有异常类的父类在Throwable类中定义了描述异常发生的位置和所有异常类共同需要的内容,11,Throwable类的构造函数,(1) public Throwable(),以null作为错误信息串内容创建Throwable对象,同时调用该对象的另一方法fillInStackTrace记录异常发生的位置。,12,Throwable类的主要成员函数,13,Throwable类的主要成员函数(续),14,Error类是Throwable类的子类,由系统保留,用户不能使用。也就是说, Error类型的错误不允许用户插手处理,由Java系统自行处理。 Error类描述
6、系统错误:如将字节码装入内存的过程中和对字节码进行检查的过程中遇到的问题、java的内部错误、资源耗尽的情况。 这类异常由java直接处理,用户程序不要理会这类异常。,、Error类,15,Exception类是Throwable类的子类,用户程序中可以直接使用Exception类处理Exception类型的异常。Exception类不仅继承了Throwable类的方法,同时定义以下两个构造函数: public Exception() public Exception(String s) 说明: 字符串s用来接收传入的字符串信息,该信息通常是 对错误的描述。,3、Exception类,16,异
7、常程序举例:,/java直接处理运行时异常 class TestSystemException public static void main(String args) intnum =new int2; for(int i=1;i3;i+) numi=i; System.out.println(“num”+i+”=”+i); 该程序产生的输出见程序的运行,17,Java对异常的处理涉及两方面的内容: 一是抛出(throw)异常 二是捕捉(catch)异常 如果程序在运行过程中出现了运行错误,并且产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,这个过程称为抛出(th
8、row)异常。当有异常对象抛出时,将在程序中寻找处理这个异常的代码,如果找到处理代码,则把异常对象交给该段代码进行处理,这个过程称为捕捉(catch)异常。如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。默认的处理方式是:首先显示描述异常信息的字符串,然后终止程序的运行。,三、异常的处理机制,18,四、异常的抛出(throw),抛出异常有两种方式:由系统自动抛出和利用抛出语句抛出。 1 由系统自动抛出异常 在程序运行过程中,如果出现了可被Java运行系统识别的错误,系统会自动产生与该错误相对应的异常类的对象,即自动抛出。例如上例。 2 人为异常抛出 两
9、种方式: 在方法头写出需要抛出的异常(利用throws语句) 在方法体内抛出异常(利用throw语句),19,Throws语句抛出异常格式:,修饰符 返回值类型 方法名(形参表)throws 异常类名1,异常类名2, 说明: 在执行该方法的过程中,如果出现了由throws列出的异常,则可以抛出异常,并在程序中寻找处理这个异常的代码;如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。,20,Throws语句举例,class Throws_Exp public static void main(String args) throws ArithmeticEx
10、ception,ArrayIndexOutOfBoundsException int a=4,b=0,c=1,2,3,4,5; System.out.println(a/b); System.out.println(ca+1); System.out.println(“end”); ,21,Throw语句抛出异常,如果需要在方法内某个位置抛出异常,可以使用Throw语句,通常将Throw语句和if语句配合使用。 格式: throw 异常类对象名 throw (new 异常类名(); 说明: 执行throw语句时,程序终止执行后面的语句,在程序中寻找处理异常的代码;如果程序中没有给出处理代码,则
11、把异常交给Java运行系统处理。,22,Throw语句举例1,class Throw_Exp1 public static void main(String args) ArithmeticException e=new ArithmeticException(); int a=4,b=0; System.out.println(“Before ArithmeticException”); if(b=0) throw e; System.out.println(a/b); ,23,Throw语句举例2,class Throw_Exp2 public static void main(Strin
12、g args) int a=5,c=1,2,3,4,5; System.out.println(“Before throw ArrayIndexOutOfBoundsException”); if(a4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(“After throw ArrayIndexOutOfBoundsException”); ,24,Throw语句举例3,class Throw_Exp3 public static void main(String args) int a=5,b=0,c=1,2
13、,3,4,5; System.out.println(“Before throw”); if(b=0) throw (new ArithmeticException (); System.out.println(a/b); if(a4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(a/b); ,25,五、捕捉异常,在前面给出的例子中,由于程序中都没有给出处理异常的代码,因此抛出的异常都被Java运行系统捕捉,由Java运行系统进行相应处理。一般来说,在设计程序过程中,如果能够预测程序中可能发生 的异常,则应在程
14、序中给出处理代码。而不交给Java运行系统处理,对于程序中那些不能预测的异常,可交给Java运行 系统处理。 要由程序自己捕捉和处理异常,需要建立try - catch-finally语句块。,26,try - catch语句块格式:,27,(1)将可能发生异常的程序代码放置在try程序块中。如果该块内的代码出现了异常,系统将终止try块代码的执行,自动跳转到所发生的异常类对应的catch块中,执行该块中的代码。如果程序运行正常,后面的各catch块不起任何作用。 (2)finally块是个可选项,无论异常是否发生,finally块的代码必定执行。通常把对各种异常共同处理部分放在finally
15、块中,如输出统一信息、释放资源、清理内存、关闭已打开的文件等。 (3)一个try块可以对应多个catch块,用于对多个异常类进行捕获。但最多只能选中一个执行。 (4)异常对象与catch块中声明的实例的匹配原则: 异常对象是catch块中声明的异常类的实例; 异常对象是catch块中声明的异常类的某一子类的实例;,Try-catch-finally结构说明:,28,try - catch-finally语句举例1,class Try_Catch_Exp1 public static void main(String args) int d=0,a; try System.out.println
16、(Before throw Exception); a=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语句块捕获了异常!); System.out.pr
17、intln(捕获的异常为+e); finally System.out.println(这是所有catch块的共有部分!); System.out.println(try-catch-finally块后面的语句); ,29,try - catch-finally语句举例2,class 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) throw (new ArrayIndexOutOfBoundsExc
18、eption(); 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-catch-finally块后面的语句); ,30,程序设计举例:,求三角形的面积或周长。 注意:三角形的三条边通过键盘输入,输入的数值构不成
19、三角形的话,需要重新输入。,31,六、用户自定义的异常类,尽管Java提供了很多异常类,但用户还是可以根据需要定义自己的异常类,即创建自定义异常类。 说明:,(1)用户自定义的异常类必须是Throwable类或Exception类的子类。,(2)自定义的异常类,一般只要声明两个构造方法,一个是不用参数的,另一个以字符串为参数。作为构造方法参数的字符串应当反映异常的信息。,32,其一般形式为: class 自定义异常类名 extends Exception 异常类体; ,用户自定义的异常类格式:,33,用户自定义的异常类说明:,自定义异常类 class MyException extends E
20、xception ,用户定义的异常同样要用try-catch捕获,但必须由用户自己抛出 throw new MyException().,34,用户自定义的异常类举例:,class Exception_exp public 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
21、m) throws UserException if (n0| m0) throw new UserException(); return n+m; class UserException extends Exception UserException()super(数据为负数);,35,七、常见的系统预定义编译异常,在包java.lang中声明的标准查检型(编译时发现)异常: (1) ClassNotFoundException 指定名字的类或接口未找到。 (2) IllegalAccessException 在调用某方法时,找不到该方法的声明。例如,某方法在另一个包的类中声明,而该方法未声明为public。 (3) InstantiationExcept
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省鞍山市海城市某中学2024-2025学年九年级上学期开学考试数学试题(含答案)
- 文书模板-展览会合同书
- 2024年07版小学5年级上册英语第3单元寒假试卷
- 珠宝销售企业要缴哪些税费-记账实操
- 烃 单元复习-2024年高中化学讲义(选择性必修三)
- 2024年水果、坚果加工品项目资金需求报告代可行性研究报告
- 强化理论的运用原理
- 【沪科】期中模拟卷A【21-23章】
- 专项24-圆周角定理-十大题型
- 幼儿园亲子活动工作计划(34篇)
- 2024江苏省沿海开发集团限公司招聘23人高频难、易错点500题模拟试题附带答案详解
- 电气工程及其自动化职业规划课件
- 人教版2024七年级上册英语各单元单词短语句型汇编
- 2024年计算机二级WPS考试题库380题(含答案)
- 2024年人教版九年级英语单词默写单(微调版)
- 22G101三维彩色立体图集
- 大学生安全文化智慧树知到期末考试答案章节答案2024年中南大学
- 2024届高考专题复习:思辨类作文专题复习
- 申请工程工期顺延的函(联系单)
- 人教版小学英语单词表(完整版)
- 国家开放大学《心理健康教育》形考任务1-9参考答案
评论
0/150
提交评论