Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材 教学课件 ppt 作者 相洁 呼克佑 第6章 异常处理

上传人:E**** 文档编号:89400402 上传时间:2019-05-24 格式:PPT 页数:47 大小:444KB
返回 下载 相关 举报
Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材  教学课件 ppt 作者  相洁 呼克佑 第6章 异常处理_第1页
第1页 / 共47页
Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材  教学课件 ppt 作者  相洁 呼克佑 第6章 异常处理_第2页
第2页 / 共47页
Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材  教学课件 ppt 作者  相洁 呼克佑 第6章 异常处理_第3页
第3页 / 共47页
Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材  教学课件 ppt 作者  相洁 呼克佑 第6章 异常处理_第4页
第4页 / 共47页
Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材  教学课件 ppt 作者  相洁 呼克佑 第6章 异常处理_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材 教学课件 ppt 作者 相洁 呼克佑 第6章 异常处理》由会员分享,可在线阅读,更多相关《Java语言程序设计 工业和信息化普通高等教育“十二五”规划教材 教学课件 ppt 作者 相洁 呼克佑 第6章 异常处理(47页珍藏版)》请在金锄头文库上搜索。

1、第6章 异常处理,本章主要内容 异常的概念 Java异常处理机制 Java异常类层次结构 处理异常和抛弃异常 自定义异常类,6.1 异常与异常类,6.1.1异常的概念 用任何一种计算机语言设计的程序在运行时都可能出现各种错误,常见的错误有除数为0、文件不能打开、数组下标超过界限、内存不够用等。对于这种在运行中出现的错误,计算机系统中通常有两种处理办法。一种是由计算机系统本身直接检测程序错误,遇到错误时使程序终止运行。这种处理方法的优点是使程序设计比较简单。但是,对程序错误一概地采用终止运行办法,显然过于简单化。因为有些情况下,完全可以通过其他途径保持程序继续运行。比如,由于文件名不符合要求而无

2、法打开文件,那么,可以提示用户输入一个新的文件名,从而使程序继续往下运行。另一种方法是由程序员在程序设计中兼顾错误检测、错误信息显示和出错处理。这种处理方法的优点是减少了中途终止程序运行的可能性。但是,要求程序员在程序设计中不仅将精力用于正常处理过程,还要精心考虑错误检测和处理,这会使程序变得复杂。并且,这类错误检测往往是在多数程序中重复甚至在一个程序中多次重复。而另一方面,如果程序中某处忽略了应有的检测,又将引起程序总体结果的错误。,Java提供了异常处理机制来处理程序运行中的错误。按照这种机制,将程序运行中打断正常程序流程的任何不正常的情况称为错误(Error)或异常(Exception)

3、,通过对语句块的检测,一个程序中所有的异常被收集起来放在程序的某一段中去处理。在Java系统中,专门设置了一个调用栈,此栈中装有指向异常处理方法的指针。在程序运行时,系统会把收集到的异常和异常处理指针所指的处理类型逐个比较,如果找到相符的类型,那么就转向相应的方法处理,如没有在调用栈中找到相应的类型指针,则终止程序运行,并显示解释信息。 在Java程序中,异常一般由以下两种原因引起。 (1)程序中存在非法操作,最简单的例子就是除数为0的除法操作。这种原因常常是程序员出于无意或大意造成的,所以称为隐式异常。 (2)程序员在程序中使用了throw语句引起的异常。这种异常是程序员出于某种考虑有意安排

4、的,所以称为显式异常。,6.1 异常与异常类,【例6-1】 观察下面的程序和程序的运行结果。 1 import java.io.*; 2 public class Ex6_1_ExceptionTest 3 public static void main(String args) 4 int i=0; 5 String str=“One“,“Two“,“Three“; 6 while(i=3) 7 System.out.println(stri); 8 i+; 9 10 System.out.println(“程序正常结束“); 11 12 ,6.1 异常与异常类,程序运行结果如下所示: On

5、e Two Three Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 3 at Ex6_1_ExceptionTest.main(Ex6_1_ExceptionTest.java:7) 观察运行结果可以发现,程序运行中出现了异常,导致程序运行非正常结束。产生异常的位置是Ex6_1_ExceptionTest.java程序的第7行中的语句;异常的名称是java.lang.ArrayIndexOutOfBoundsException。其原因是当数组str的下标i=3时,数组下标越界。请注意,输出结果中没有“

6、程序正常结束”,即最后一条println语句并没有执行。 在程序运行过程中出现异常,如果不进行处理,将使程序在异常发生时终止程序的运行。为了使程序能够正常运行,应对程序运行时可能出现的各种非正常情况进行分析并进行必要的处理。,6.1 异常与异常类,6.1.2 Java异常类 Java的异常处理机制也是面向对象的。每发生一起异常事件,就会自动生成个异常对象。在Java类库的各个包里定义了很多的异常类,所有异常类都直接或者间接地继承了Throwable这个类。图6.1是部分错误类和异常类的类层次结构。 Java所有的异常都是以类的形式存在,除预定义的异常类外,还允许自定义异常类。如果在一个方法的运

7、行过程中发生了异常,则这个方法将会自动生成一个异常类对象,该异常类对象将被提交给Java运行时系统,这个过程称为抛出异常。抛出异常也可以在程序中使用throw语句强制进行。当Java运行时系统接收到异常对象,会查找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获异常。如果Java运行时系统找不到可以捕获异常的代码,则运行时系统将终止,相应的Java程序也会终止运行。在上例中抛出了ArrayIndexOutOfBoundsException类的异常对象,但由于没有捕获和处理该异常的代码,所以当异常发生时程序将结束运行。,6.1 异常与异常类,6.1 异常与异常类,有关Throwa

8、ble、Error和Exception的构造方法和方法可查看JDK API文档。在此只介绍几个常用的构造方法和方法。 public Exception() 构造详细消息为null新异常。 public Exception(String message) 构造带指定详细消息的新异常。 public String getMessage() 返回异常抛出原因的字符串。 public String toString() 返回异常的简短描述,包括异常类名、异常原因。 public void printStackTrace() 输出调用堆栈跟踪信息。 从图6.1可知,Java处理的异常分为两大类:Erro

9、r类和Exception类(包括RunTimeException及其它Exception类)。Java对不同的异常采取三种不同处理方式。 1.程序不能处理的错误 Error类定义了在通常环境下不希望被程序捕获的异常。也就是说Java程序不应该捕获这类异常。因为它们通常是灾难性的致命错误,不是程序可以控制的。如内存溢出、虚拟机错误、栈溢出等。这类错误与程序本身无关,通常由系统进行处理。,6.1 异常与异常类,2.通过调试程序能避免而不捕获的异常 RuntimeException类异常(运行时异常)主要是程序设计或实现问题,如数组下标越界、算术异常、使用空引用等。正确设计与实现的程序不应该产生这类

10、异常。对这类异常可以通过调试程序尽量避免而不是去捕获。当然在必要的时候,也可以声明抛出或捕获这类异常。表6-1是常见的RunTimeException类的子类。更多的RunTimeException类的子类可查看JDK API文档。 3.必须捕获的异常 有些异常在程序编写时无法预料,如中断异常、文件没有找到异常、无效的URL异常等,是除RunTimeException类异常的其它Exception异常(非运行时异常)。在正常条件下这些异常是不会发生的,什么时候发生也是不可预知的。为了保证程序的健壮性,Java要求必须对可能出现的这类异常进行捕获并处理。表6-2是常见的Exception类的子类

11、。更多的Exception类的子类可查看JDK API文档。,6.1 异常与异常类,表6-1 部分RunTimeException类的子类,6.1 异常与异常类,表6-2 部分Exception类的子类,6.1 异常与异常类,6.2 异常处理,异常处理是指在程序运行发生异常时,捕获异常并进行处理或抛弃异常,使程序继续正常运行。在Java语言中,异常处理可通过5个关键字实现控制:try、catch、finally、throw和throws。 6.2.1 try-catch-finally语句 使用try-catch-finally语句处理异常 (1)将要异常监控的程序段放在try代码块中; (2

12、)如果try代码块中发生异常,抛出的异常会被捕获; (3)抛出的异常用catch捕获,然后用某种合理的方法处理该异常。,【例6-2】 修改例6-1程序,对数组下标越界异常进行处理。,1 import java.io.*; 2 public class Ex6_2_ExceptionTest 3 public static void main(String args) 4 int i=0; 5 String str=“One“,“Two“,“Three“; 6 try 7 while(i=3) 8 System.out.println(stri); 9 i+; 10 11 catch(java.

13、lang.ArrayIndexOutOfBoundsException e) 12 System.out.println(“数组下标越界异常!“); 13 finally 14 System.out.println(“finally i=“+i); 15 16 System.out.println(“程序正常结束“); 17 18 ,6.2 异常处理,程序运行结果如下所示: One Two Three 数组下标越界异常! finally i=3 程序正常结束 与例6-1程序代码比较,其中第6、1115行是增加的部分,这正是Java异常处理的语句。与例6-1程序的运行结果比较也发生了变化,程序也

14、能正常结束,在第4次执行8行中的语句时,str数组下标越界,抛出ArrayIndexOutOfBoundsException类异常对象,程序的正常执行流程被打乱,9行中的语句不再执行,而是执行其后的catch块中的语句,即第12行中的语句,输出“数组下标越界异常!”,接着执行14行中的语句,输出“finally i=3”,最后执行16行中的语句,输出“程序正常结束”。 上述程序中的异常是RunTimeException类异常,修改程序就可以避免这些异常。,6.2 异常处理,使用try-catch-finally语句捕获程序中产生的异常,然后针对不同的异常进行不同的处理。下面是try-catch

15、-finally语句的基本格式: try /可能发生异常的语句块 catch(ExceptionType1 e) /处理ExceptionType1异常的语句块 catch(ExceptionType2 e) /处理ExceptionType2异常的语句块 catch( ) /处理其它异常的语句块 finally /无论异常是否发生都一定执行的语句块 ,6.2 异常处理,一条try语句包含了一个可能发生异常(一种或多种异常)的语句块,后面紧跟着一条或多条catch子句(捕获一种或多种异常),在其后的finally子句是可选部分。catch子句中包含的语句块,就是对执行try语句块时产生的异常进

16、行处理的语句块;ExceptionType1、ExceptionType2等代表某种异常类,e为相应的异常类对象。如果使用了finally子句,则无论执行try语句块时是否发生异常,都将执行finally子句中的语句块。try语句块不能单独使用,必须和catch或finally两子句配合使用。也就是说,有一个try语句,至少要有一个catch或者finally和它相配合。 try-catch-finally语句的作用是:当try语句块中的代码执行时发生异常,程序的正常运行便中断,并抛出异常对象,然后在try块后面的各个catch()中找出与异常对象相匹配的类。当异常对象符合下面3个条件之一时,就认为这个异常对象与对应的异常类相匹配。 异常对象所属的类与catch()中参数类相同; 异常对象所属的类是catch()中参数类的子类; catch()中参数类是一个接口时,发生的异

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

当前位置:首页 > 高等教育 > 大学课件

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