Java程序设计电子教案第五章.ppt
《Java程序设计电子教案第五章.ppt》由会员分享,可在线阅读,更多相关《Java程序设计电子教案第五章.ppt(73页珍藏版)》请在三一办公上搜索。
1、第5章 异常,5.1 编程中的错误5.2异常与异常类5.3异常的处理5.4 异常地抛出5.5应用举例,5.1 编程中的错误,程序中出现的错误必须要处理,否则程序会错误退出或带来错误的结果和状态,造成越来越多的异常现象。根据错误的性质和特点,般可把错误分为编译错误和运行错误两种。5.1.1 编译错误编译错误是由于所编码的程序存在语法问题,未能通过内源代码到目标码的编译过程而产生的,它是由语言的编译系统负责检测和报告。,下一页,返回,5.1 编程中的错误,每种计算机高级语言都有自己的语法规范,编译系统就根据这个规范来检查编程人员所书写的源代码(程序)是否符合既定的标准。有的高级语言的语法规定得比较
2、严格,有的语言则给编程人员很大的自由度,如C语言,程序可以写得很灵活,使编程者可充分发挥他们的核心和能力。Java语言是定位于网络计算的安全性要求较高的语言,它的语法规范设计得比较全面,相对于C语言增加了不少规定。例如,数组元素下标越界检查、检查对未开辟空间对象的使用等。由于更多的检查工作由系统自动完成,可以减少编程者的设计负担和程序中的隐含错误,提高初学者编程的成功率。,上一页,下一页,返回,5.1 编程中的错误,大部分编译错误是由于对语法不熟悉或拼写失误等引起的,例如在Java语言中规定:需在每个句子的末尾使用分号,标识符区分大小写,如果不注意这些细杰,就会引发编译错误。由于编译系统会给出
3、每个编译错误的位置和相关的错误信息,所以修改编译错误相对较简单;但同时由于编译系统判定错误比较机械,再参考他所指出的错误地点和信息时应灵活的同时参照上下文其他语句,将程序作为一个整体来检查。没有编译错误是一个程序能正常运行的基本条件,只有所有的编译错误都改正了,源代码才可以被成功的编译成目标代码或字节代码。,上一页,下一页,返回,5.1 编程中的错误,5.1.2 运行错误一个没有编译错误的可执行或解释的程序,距离完全正确的程序通常还有一段距离,这是因为排除了编译错误,程序中可能还存在着运行错误。运行错误是在程序的运行过程中产生的错误。根据性质不同,运行错误还可分为系统运行错误和逻辑运行错误。,
4、上一页,下一页,返回,5.1 编程中的错误,系统错误是指程序在执行过程中引发了操作系统的问题。应用程序是工作在计算机的操作系统平台上的,如果应用程序运行时所产生的运行错误危及操作系统,对操作系统产生损害,就有可能造成整个计算机的瘫痪,例如死机、死循环等。所以不排除系统运行错误,程序就不能正常地工作。系统运行错误通常比较隐秘,排除时应根据错误的现象,结合源程序仔细判断。例如,出现死循环,就应该检测源程序中的循环语句及其中止条件;出现死机,就应该检查程序中的内存分配处理语句等。,上一页,下一页,返回,5.1 编程中的错误,排除了系统运行错误,程序可以顺利执行了,却仍然不能代表它已经毫无问题了。因为
5、程序中还有可能存在着逻辑运行错误。逻辑运行错误是指程序不能实现编程人员的设计意图和设计功能而产生的错误,例如排序时不能正确处理数组头后的元素等。有些逻辑运算错误是由于算法考虑不周引起的,也有些则来自编码过程中的疏忽。排除运行错误时,一个非常有效和常用的手段是使用开发环境所提供的单步运行机制和设置断点功能来分解程序运行过程,使之在人为的控制下边调试边运行。在调试过程中,调试者可以随时检查变量中保存的中间量,设置临时运行环境,一步一步地检查程序的执行过程,从而挖出隐藏的错误。,上一页,返回,5.2异常与异常类,5.2.1 异常处理机制概述异常就是在程序的运行过程中所发生的异常事件(不正常现象),它
6、中断指令的正常执行。在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象,故又称为特殊的运行错误对象。很多类型的错误也都会导致异常的产生,如需要打开的文件不存在、内存不够、数据访问超界、严重者导致硬盘崩溃等,都会影响程序的正常执行。在网络环境中运行的Java程序,安全是首先考虑的重要元素之一。为了能够及时有效地处理程序中的远行错误,Java中通过引入异常和异常类来处理。作为面向对象的语言,异常与其他语言要素一样,是面向对象规范的一部分,是异常类的对象。,下一页,返回,5.2异常与异常类,Java中定义了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理
7、错误的方法等内容。每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。这就是java的异常处理机制。如在例5-1中,当我们在一个文件上建立文件输入流时,如果这个文件并不存在,异常就会生成,另外,在从文件中读取数据时,也可能发生IO异常。,上一页,下一页,返回,5.2异常与异常类,例5-1 文件操作异常。Import java.io.*;Class Exception De
8、mol Public static void main(String args)File Input Stream Fis=nes File Input Stream(“text”);Int b;While(b=fis.read()!=-1)System.out.print(b);Fis.close();,上一页,下一页,返回,5.2异常与异常类,当我们编译这个程序时,屏幕上会输出下面的信息:ExceptionDemo1.Java:6:Exception java.io.File Not Found Exception must be caught,or it must be declared
9、 in the throws clause of this methodFile Input Stream fis=new File Input Stream(“text”);ExceptionDemol.java:8:Exception java.io.IOException must be caught,or it must be declared in the throws clause of this method.While(b=fis.read()!=-1),上一页,下一页,返回,5.2异常与异常类,2 errors在Java程序的执行过程中,异常对象可能是由正在运行的方法生成,也
10、可能由Java虚拟机生成,其中包含一些信息指明异常事件的类型以及当异常发生时程序的运行状态等。生成的异常对象将传递给Java运行时系统,这一异常的产生和提交过程称为抛出(throw)异常。当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。寻找的过程从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后运行时系统把当前异常对象交给这个方法进行处理。这一过成称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。例5-2中出现的即为这种情况。,上一页,下一页,返回
11、,5.2异常与异常类,例5-2 当0作为除数时,会发生除零溢出的异常事件,使程序无法继续运行。Class ExceptionDem02 Public static void main(String args)Int a();System.out.println(5a);我们编译这个程序得到其字节码文件,然后运行它,屏幕上的显示如下:javaLang.ArthmeticException:/by zero at ExceptionDemo2main(ExceptionDemo2.Java:4),上一页,下一页,返回,5.2异常与异常类,在上面的两个例子中,我们都遇到了异常。屏幕上所显示的信息:j
12、avaio File Not Found Exception,java.io.IOException以及 javaLang Arlthmetic Exception分别指明了异常的类型。同时我们也可以看到,对于一些异常,在程序中必须对它进行处理,否则编译程序会指出错误(如例5-1)。但对另一些异常,在程序中可以不做处理,而直接由运行时系统来处理(如例5-2)。使用异常处理程序出错有以下两个原因:一是将错误处理程序与正常程序流分开,增加程序的可读性和可维护性;二是可容易的指出异常在何处处理。,上一页,下一页,返回,5.2异常与异常类,5.2.2 异常类结构与组成在java类库的每个包中都定义了异
13、常类,所有这些类都是类Throwable的子类。Throwable类属于类库java.lang包中的一个类,在程序中不必使用import语句引入即可食用。Throwable类派生了两个子类:Exception和Error。其中Error类由系统保留,而Exception类则供应用程序使用。Java作为面向对象设计语言,它定义了很多标准的异常处理类,采用捕获-抛出(catch-throw)方式,捕获并处理异常。,上一页,下一页,返回,5.2异常与异常类,Error类的子类有后缀Error,它们用于指示异常系统条件。例如Out Of Memory Error表示虚拟机内存超界,内存单元收集程序无法
14、获得更多的内存:Stack Over Flow Error表示翻译器中堆栈溢出。这些Error类的子类包括动态链接失败、虚拟机错误等,通常Java程序不捕获这些异常,也不会抛出这种异常。一般来说,这些异常是不可修复的,不易处理。Exception类的子类一般是可以修复的。例如EOF Exception表示打开的文件不再有可读数据;File Nor Found Exception表示打开的文件在文件系统中不存在。这一子类是Java程序中所大量处理的异常。并且同其他的类一样,Exception类有自己的方法和属性。他的构造函数有两个:,上一页,下一页,返回,5.2异常与异常类,格式 public
15、Exception();Public Exception(String s);说明 第二个接受字符串参数传入的信息,通常是对该异常所对应错误的描述。Exception类从父类Throwable那里还继承了若干方法,其中常用的有:格式 public String to String();说明 显示异常信息以及getMessage()返回信息的简短描述的字符串。格式 public void print StackTrace();说明 打印异常发生处堆栈跟踪信息,包括异常的类名、方法名及所在程序的行数,没有返回值,实际上它的功能是完成一个打印操作,在当前的标准输出(一般就是屏幕)上打印输出当前异常对
16、象的堆栈使用轨迹,也即程序先后调用执行了哪些对象或类的那些方法,使得运算过程中产生了这个异常对象。,上一页,下一页,返回,5.2异常与异常类,格式 public Sting GetMessage();说明 获得与异常和错误相关的更详细的错误信息,但非每个异常都有详细信息。如果没有详细信息,该方法调用后返回空值。5.2.3 系统定义的运行异常Exception类有若干子类,每一个子类代表了一种特定的运行时异常。其中有些是系统实现定义好并包含在Java类库中的,称为系统定义的运行异常。系统定义的运行异常通常对应着系统运行错误。由于这种错误可能导致操作系统错误甚至ishi整个系统的瘫痪,如例5-1所
17、涉及到的File Not Found Exception和IO Exception。对于这类异常来说,如果程序不进行处理,可能会带来意想不到的结果,所以定义异常类来特别处理,下面列出若干常见的系统定义运行异常:,上一页,下一页,返回,5.2异常与异常类,Class Not Found Exception:未找到欲装载使用的类异常。ArrayIndexOnOfBoundsException:数组越界异常,即小雨或超过数组界限使用。File Not Found Exception:引用空的尚无内存空间的对象异常。Arithmetic Exception:零件为除数等算术异常。Intcrrupted
18、 Exception:线程在睡眠、等待或其他原因暂停时被其他线程扫断。Un known Host Exception:无法确定主机的IP地址异常。Security Exception:安全性异常,如Applet欲读写文件。Malforned URL Exception:URL格式异常。String Index Out Of Bounds Exception:访问String或String Buffer字符时,索引小于零或超过字符串长度。,上一页,下一页,返回,5.2异常与异常类,例5-3 测试异常程序。import java.io.*;Public class Exception Test p
19、ublic static void main(String args)For(int i-0;i4;i+)Int k;Try Switch(i)Case();/divided by zero,上一页,下一页,返回,5.2异常与异常类,Int zero=0;K=911/zero;Break;Case 1;/null pointer Int b=null;K=b0;Break;Case 2;/array index out of bound Int c=new int2;K=c9;Break;,上一页,下一页,返回,5.2异常与异常类,Case 3;/string index out of bou
20、nd Char ch-“abc”.charAt(99);Break;catch(Exception e)System.out.printIn(“nTestcase#”+i+”n”);System.out.printIn(e);,上一页,下一页,返回,5.2异常与异常类,运行测试程序的输出结果如下:Test case#0Java.lang.Arithmetic Exception:/by zeroTest case#1Java.lang.Null Pointer Exception;Test case#2Java.lang.Array Index Out Of Bounes ExceptionT
21、est case#3,上一页,下一页,返回,5.2异常与异常类,Java.lang.String Index Out Of Bounds Exception:Stingindes out of range:99由于定义了相应的异常,Java程序即使产生一些致命的错误,如引用空对象的等,系统也会自动产生一个对应的异常对象来处理和控制这个错误,避免其蔓延或产生更大的问题。5.2.4 用户自定义的异常对于某个应用所特有的运行错误,则需要编程人员根据程序的特殊逻辑在用户程序里自己创建用户自定义的异常类和异常对象。这种用户自定义异常主要用来处理用户程序中特定的逻辑运行错误。定义一个Employee类的构
22、造函数:,上一页,下一页,返回,5.2异常与异常类,Employee(String name,double initSal)/有两个参数的构造函数,利用这两个参数初始化/雇员姓名、工资并初始化雇员编号This();m_EmpName=new String(name);If(initSalm,MinSalary)System.exit(0);M_EmpSalary=initSal;,上一页,下一页,返回,5.2异常与异常类,在这个方法里,一旦给出的雇员工资初值不符合最低工资的规定,则直接退出整个程序的运行。这样处理虽然保证了程序的逻辑正确性,但却没有给出足够的错误提示信息,如果程序里还有其他类似
23、的处理,那么当产生错误退出运行时,用户将无法得知到底是什么错误导致了这次推出,对于程序的调试和运行都很不方便。为了解决这个问题,我们可以定义一个用户程序异常IIIegalSalaryException,专门处理上述“发给雇员的工资低于系统要求的最低工资”的逻辑错误。,上一页,下一页,返回,5.2异常与异常类,Public class IllegatSalaryException Extends Exception/自定义的系统类Exception的子类 Private Emplouee m_ConcernedEmp:/产生当前错误的Employee对象的引用 Pribate double m_
24、IllegalSalary;/产生当前错误的非法的工资数额 IllegalSalaryException()Super(“不合法的起薪:低于最低工资限额”);/调用父类Exception的构造函数,上一页,下一页,返回,5.2异常与异常类,IllegalSalaryException(Employee emp,double iSal)/构造函数 This();M_ConcernedEmp=emp;/初始化两个属性 M_illegalSalary=iSal;Public String to String()/重载父类的方法,给出详细的错误信息 String s;,上一页,下一页,返回,5.2异常
25、与异常类,If(m_ConcernedEmp!=null)S=”为雇员提供非法工资;雇员号_”+m_ComcernedEmp.getEmpNo()+”非法工资数额_”+m+IllegalSalary+”合法的最低工资数额_”+Employee.getMinSalary();Else S=”给出的工资初始值不合理,不能创建Employee对象”;Return s;,上一页,下一页,返回,5.2异常与异常类,用户自定义异常用来处理程序中可能产生的逻辑错误,使得这种错误能够被系统及时识别并处理,而不致造成更大的影响,从而使用户程序更为稳定,有更灵活的容错性能,并使整个系统更加安全。创建用户自定义异常
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 电子 教案 第五
链接地址:https://www.31ppt.com/p-6510016.html