Java语言程序设计 教学课件 作者 辛运帏 饶一梅 第七章.ppt
文本预览下载声明
第7章 JAVA语言中的异常 异常 编写程序时多多少少总会有些错误,程序中的语法错误会在编译时被发现并修正,而有些错误是发生在运行阶段的。 这些错误依照其严重程度分为两类, 一类是致命性的严重错误,它们的出现可能会导致系统崩溃,并且程序员并不能编写程序解决所出现的问题。 另一类是普通级别的错误,这类错误如果不加控制就使程序非正常中断,但如果编写代码来处理的话,就有可能避免中断程序的执行。这类错误一般地称为异常(Exception),用来处理异常的过程称为异常处理。 异常 在Java中主要有三类异常。事实上,Java定义了类java.lang.Throwable,它是使用异常处理机制可被抛出并捕获的所有异常对象的父类。它有三个基本子类,如下图: 异常 每个类的使用目的不同。 Error表示很难恢复的错误。一般不期望用户程序来处理,即使程序员有能力处理这种错误,也还是交给系统处理为好。 RuntimeException用来表示设计或实现方面的问题。因为设计和实现正确的程序不会引发这类异常,所以常常不处理它。发生这类异常时,运行时环境会输出一条信息,提示用户修正错误。 其他异常表示运行时因环境的影响可能发生并可被处理的问题。因为用户的错误很可能导致这类问题发生,我们要学习的是如何处理这类异常。 异常示例 例7-1 文件操作功能描述 { openTheFile; //打开文件 determine its size; //获取文件的长度 allocate that much memory; //分配内存 read-file; //读文件 closeTheFile; //关闭文件 } 实现文件读取的程序大多有上述这样的程序框架。因为文件存放在外存,程序要访问文件时必须先要将文件放入内存然后才能访问。这段程序是顺序执行结构,而前一句执行的结果又直接影响后一句是否能执行。如果中间哪一条语句执行不正确,后续语句都不能正确执行,程序也会中断。所以凡是有输入输出操作的语句都可能会出现问题。 异常示例 例7-2 增加了约束的文件操作功能描述 openFiles; //打开文件 if (theFilesOpen){ //判定打开是否正确 determine the length of the file; //获取文件的长度 if (gotTheFileLength){ //判定已得到文件长度 allocate that much memory; //分配内存 if (gotEnoughMemory){ //内存分配成功 read the file into memory; //读文件 if (readFailed) errorCode=-1;//读取失败 else errorCode = -2; //读取成功 closeTheFile; //关闭文件 } else errorCode=-3; //内存分配不成功 } else errorCode=-4 ; //没有得到文件长度 } else errorCode=-5; //文件打开不正确 异常 程序发生异常时称为产生了一个异常事件,系统根据异常生成一个异常对象。 根据这个异常的种类,该对象可能由正在运行的方法生成,也可能由JVM生成。异常对象中包含了该异常必要的详细说明信息,包括所发生的异常事件的类型及异常发生时程序的运行状态。 生成的异常对象传递给Java运行时系统,运行时系统寻找相应的代码来处理这一异常。 我们把生成异常对象并把它提交给运行时系统的这一过程称为抛出(throw)一个异常。 异常 异常发生后,Java运行时系统从生成对象的代码块开始进行回溯,沿方法的调用栈逐层回溯寻找处理代码,并把异常对象交给该方法处理,这一过程称为捕获(catch)。如图所示: 异常处理方式示例 下面用异常处理方式重写例7-2。 try{ openTheFile; //打开文件 determine its size; //获取文件的长度 allocate that much memory; //分配内存 read-File; //读文件 closeTheFile; //关闭文件 } catch(fileopenFailed) { //文件打开失败的处理代码;} catch(sizeDeterm
显示全部