第五章 异常处理

上传人:豆浆 文档编号:6402588 上传时间:2017-08-08 格式:PPT 页数:49 大小:1.02MB
返回 下载 相关 举报
第五章 异常处理_第1页
第1页 / 共49页
第五章 异常处理_第2页
第2页 / 共49页
第五章 异常处理_第3页
第3页 / 共49页
第五章 异常处理_第4页
第4页 / 共49页
第五章 异常处理_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《第五章 异常处理》由会员分享,可在线阅读,更多相关《第五章 异常处理(49页珍藏版)》请在金锄头文库上搜索。

1、第5章 异常处理,技能目标能够预先考虑、发现并能处理程序中出现的异常知识目标Java异常的概念Java异常处理机制处理异常关键字的使用异常类项目任务本项目完成成绩管理系统中与成绩录入有关的异常处理的功能,要求对录入的成绩进行识别判断,检查出非法数据。比如,成绩只能由数字组成,如果出现异常,则应该有相应处理。,本章要点,主要内容,5.1 异常的概念5.2 异常类5.3 异常处理机制5.4 异常的处理5.5 自定义异常类,5.1 异常的概念,在程序执行期间会有许多意外的事件发生。例如:整除运算的除数为零,访问数组的下标越界,找不到指定目录下的文件等。上述状态有些在程序编译时编译器无法发现报错,等到

2、程序运行时才会出现问题,针对这些情况,需要编写一些额外的代码进行处理,使得程序才能够继续运行,java中把这些意外的事件称为异常。 概括来说,在程序执行过程中,任何能够使正常程序流程中断的条件,就称为异常。,Java 虚拟机检测到了非正常的执行状态,这些状态可 能是由以下几种情况引起的: 程序中出现了比较明显的语义错误,例如整数对零做 除法、对负数开平方根等等。 在载入或链接Java 程序时出错。 算法太复杂,超出了某些资源限制,例如使用了太多 的内存导致死机等等。这类异常一般都是程序员大意造成的,可以通过修改程序避免。,引起异常产生的因素,Java 程序代码中的throw 语句被执行。这类异

3、常的性质 和上述异常是不一样的,它们是程序员预置的,异常 的发生是正常的程序执行。 异步异常发生。异步异常的原因可能有:Thread 的stop 方法被调用。Java 虚拟机内部错误发生。,引起异常产生的因素,Java中的异常类具有层次组织,其中Throwable类是Error类(错误类)和Exception类(异常类)的父类,Throwable是Object的直接子类。 异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。,5.2 异常类,Java异常类和错误类的继承结构,Error类被认为是不能恢复的严重错误,用来处理运行环境方面的

4、异常。如虚拟机错误、装载错误、动态连接错误、系统内部错误和资源耗尽错误等。这类异常主要是和硬件有关系,而不是有程序本身抛出。通常,Java程序不对这类异常进行处理,而是让程序中断。,错误类,执行异常也称为运行时异常,所有执行异常类都是继承于RuntimeException类。这些异常都是系统自动抛出的,Java编译器允许程序不对它们做出处理(即能够正常编译,但执行时就会发生异常)。,执行异常,11,除了执行异常外,其余的异常都属于检查异常,也称为非运行时异常,在程序编译时就能进行处理,并给出具体的错误信息。Java编译器要求程序必须捕获或者声明抛出这种异常。,检查异常,13,常见异常举例,算术

5、异常:0作除数(包括模) 例如:int x=0 , y; y=100/x ;空指针异常 例如:int a =null ;System.out.print(a.length);类型强制转换异常 例如:Object obj=new Object( ); int a =(int ) (obj);数组负下标异常 例如:int a =new int-10;数组下标越界异常 例如:int a =new int10; a10=0;,在Java中java.lang.Throwable类是所有异常类的超类,该类提供了获得异常信息的方法,下表列出了获取异常信息的方法及说明。,获取异常信息,5.3 异常处理机制,J

6、ava语言中提供了非常灵活的异常处理机制,它可以分成三部分:抛出异常、捕获异常和处理异常。 因为Java程序都是在类中编写执行的,所以异常事件会根据事件的类型首先生成 一个异常类对象,生成的异常对象将被传递给Java 运行的系统,异常的产生和提交过程称为抛出异常。 当Java运行时,系统得到一个异常对象后,会寻找处理该异常的代码。如果处理该异常的代码存在,则在找到这段代码之后,系统就会把当前异常对象交给这段代码进行处理,这一过程称为捕获(catch)异常。如果程序中不存在处理该异常的代码,则运行时系统将终止,相应地Java程序也将自动退出,后面的代码也不会被执行。,Java异常处理是通过5个关

7、键字:try、catch、throw、throws和finally来管理的。 throws 声明异常 throw 抛出异常 try将会发生异常的语句块(抛出异常 ) catch 如果有异常就会执行里面的语句(捕获异常) finally 必须执行的代码 块,5.4 异常处理,5.4 异常的处理,异常处理的方法有三种: 通过trycatchfinally结构对 异常捕获和处理 用throws和throw抛出异常 自定义异常类,try-catch-finally用法,在Java语言中,对容易发生异常的代码,可通过trycatchfinally语句捕获。在try语句块中编写可能发生异常的代码在catc

8、h语句块中捕获执行这些代码时可能发生的异常在finally语句中存放不管程序是否发生异常都要执行的代码,通常用于执行垃圾回收、释放资源等操作。,try / 这里写需要监控错误的代码块 catch (Exception e) / 这里写处理错误的逻辑 /e是产生的错误对象 finally /这里写无论出错与否都要运行的代码块,try-catch-finally结构,try语句不能脱离catch或finally语句而单独存在,至 少有一个catch或finally语句。 在try代码块中定义的变量的作用域只为try代码块中, 在其他的代码块中不能访问该变量。 try语句后可以有1/0到多个catc

9、h语句或0个到1个 finally语句。,说明,处理除数为0的异常。public class Example public static void main(String args ) int m, n;try m = 5; n = 0; int c = m / n; System.out.println(m + / + n + = + c); catch (ArithmeticException e) System.out.println(e.toString( ); System.out.println(Divided by zero error!); System.out.println

10、(After try-catch.); ,可嵌入的try块,一个try代码块可以嵌入到另一个try代码块当中。内部try代码块产生的异常如果没有被与该内部try代码块相关的catch捕获,就会传到外部try代码块。,public class ExceptionExampublic static void main(String args)int data1 =2,4,6,8,10,12;int data2 =1,0,2,4,3;tryfor(int i=0;idata1.length;i+) trySystem.out.println(data1i+ /+data2i+ is+data1i/d

11、ata2i);catch(ArithmeticException e)System.out.println(不能被零除!);catch(ArrayIndexOutOfBoundsException e)System.out.println(程序被终止!);,执行结果:2/1is2不能被零除!6/2is38/4is210/3is3程序被终止!,多重catch块,与一个try相关的catch语句可以有多个。每一个catch语句捕获一个不同类型的异常。 某些情况,由单个代码段可能引起多个异常。处理这种情况时就需要定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个cat

12、ch子句被依次检查,第一个匹配异常类型的子句被执行。当一个catch语句执行以后,其他的子句被忽略,程序从try/catch块后的代码开始继续执行。,try/try语句块中语句catch(Eception1 e1)/处理异常Exception1的语句catch(Exception2 e2)/处理异常Exception2的语句catch(ExceptionN en)/处理异常ExceptionN的语句finally/finally语句块中语句,多重catch块结构,27,public class Examplepublic static void main(String args) int a

13、= new int2; int n = a.length; int x=0; a0 = 10; try for (int i = 0; i = n; i+) x = 100 / ai; System.out.println(100/a + i + = + x); catch (ArithmeticException e) System.out.println(ArithmeticException); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayIndexOutOfBoundsException);,执行结果

14、:100/a0=10ArithmeticException,finally语句定义了一个总是被执行的代码块,而不管有没有出现异常 : try . catch(ExceptionType1 ExceptionObject) . catch(ExceptionType2 ExceptionObject) . finally . / (统一的出口,最终必定要执行),finally语句,finally语句,可以使用try. finally结构处理异常 无论try语句块中是否抛出异常,也不管catch语句块是 否捕获异常,finally语句块是必须执行的。 finally语句块通常是比较固定,做的都是一些清除资 源的工作,如关闭文件或者数据流。 finally是可选的,程序中没有它也可以。 如果由于return、continue、break等语句而使控制转 移到try模块之外,在控制转移到try模块之前,仍然执 行finally中的内容。,public class Examplepublic static void main(String args) int i; try for (i = 1; i 10; i+) System.out.println(i);if (i = 2)break; finally System.out.println(finally块被执行!); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号