1第五章异常处理5.1基本概念5.2Throwable类及其子类5.3异常处理5.4抛弃异常5.5总结25.1基本概念1.什么是异常?异常是在程序运行过程中所发生的破坏了正常的指令流程的事件。软件和硬件错误都可能导致异常的产生。第五章异常处理35.1基本概念1.什么是异常?publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){inti=0;Stringgreetings[]={Helloworld!,No,Imeanit!,HELLOWORLD!!};while(i4){System.out.println(greetings[i]);i++;}}}第五章异常处理45.1基本概念2.Java处理异常的机制异常处理可分为以下几个步骤:1)当方法中有一个错误发生后,该方法创建一个异常对象并把它交给运行时系统。异常对象中包含了有关异常的信息,如异常类型、发生错误时的程序状态等。抛出异常:创建一个异常对象并把它交给运行时系统的过程。第五章异常处理55.1基本概念2.Java处理异常的机制异常处理可分为以下几个步骤:2)运行时系统在方法调用堆栈里为被抛出的异常查找处理代码。运行时系统从发生错误的方法开始进行回朔,在方法调用堆栈里向后搜索,直到找到含能处理当前发生的异常的处理程序的方法。捕获异常:找到异常处理程序的过程。第五章异常处理65.1基本概念2.Java处理异常的机制异常处理可分为以下几个步骤:3)通过方法调用来处理异常4)如果运行时系统在方法调用栈查遍了所有的方法而未找到合适的异常处理程序,则运行是系统终止执行。第五章异常处理75.2Throwable类及其子类Throwable是java.lang包中一个专门用来处理异常的类。抛出的异常对象必须是Throwable类的后代。第五章异常处理85.2Throwable类及其子类ThrowableErrorExceptionVirtualMachineErrorThreadDeathIOExceptionEOFExceptionStackOverflowErrorRuntimeExceptionOutOfMemoryErrorFileNotFoundeExceptionNullPointerExceptionArithmeticExceptionIllegalArgumentException...............95.2Throwable类及其子类类Throwable有两个直接子类:Error和Exception,它们分别用来处理两组异常。Error类:被认为是不能恢复的严重错误,用来处理运行环境方面的异常。如:,虚拟机错误、装载错误、动态连接错误、系统内部错误和资源耗尽错误等。这类异常主要是和硬件有关系,而不是有程序本身抛出。通常,不应该抛出这种类型的错误,Java程序不对这类异常进行处理,而是让程序中断。Exception类:是Throwable的一个主要子类,定义可能遇到的轻微错误,分为派生自RuntimeException类的异常和非派生自RuntimeException类的异常。这时,可以写代码来处理异常并继续程序执行,而不是让程序中断。运行时异常RuntimeException非运行时异常第五章异常处理105.2Throwable类及其子类运行时异常RuntimeExceptionjava程序运行时常常遇到的各种异常的处理。编程错误导致RuntimeException,如算术运算异常ArithmeticException(由除0错等导致)、数组越界异常ArrayIndexOutOfBoundsException,空指针访问等。非运行时异常其它则为非运行时异常,由于意外情况而发生的,如输入输出异常IOException,如试图读取文件结尾以后的数据、试图打开错误的URL、试图根据并不代表已存在类的字符串来查找Class对象等。Java编译器要求Java程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。第五章异常处理115.3异常处理异常处理可以有以下几种:1.对运行时异常可以不做处理;2.使用try-catch-finally语句捕获异常;3.通过throws子句声明异常第五章异常处理125.3异常处理1.运行时异常Java编译器允许程序不对它进行处理。这时,Java运行时系统会把生成的运行时异常对象交给缺省的异常处理程序,在标准输出上显示异常的内容以及发生异常的位置。例如:publicclassRuntimeExceptionProc{publicstaticvoidmain(Stringargs[]){inti=0;intr=4/i;}}第五章异常处理运行结果:java.lang.ArithmeticException:/byzeroatRuntimeExceptionProc.main(RuntimeExceptionProc.java:4)135.3异常处理2.捕获异常用try-catch-finally语句来捕获一个或多个异常,基本格式为:try{Javastatements}catch(ExceptionType1ExceptionObject){ExceptionHandling}catch(ExceptionType2ExceptionObject){ExcptionHandling}……}finally{finalHandling}第五章异常处理145.3异常处理2.捕获异常说明:try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个异常。try所限定的代码中,当抛弃一个异常时,其后的代码不会被执行第五章异常处理155.3异常处理2.捕获异常说明:catch所处理的异常类型与生成的异常对象的类型完全一致或者是它的父类第五章异常处理165.3异常处理2.捕获异常说明:无论try所指定的程序块中抛弃或不抛弃异常,也无论catch语句的异常类型是否与所抛弃的异常的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等见例题:TryCatchFinally.java第五章异常处理175.3异常处理finally语句的好处:try{打开文件...对数组操作...关闭文件//don'tdothis;itduplicatescode}catch(ArrayIndexOutOfBoundsExceptione){关闭文件//don'tdothis;itduplicatescodeSystem.err.println(CaughtArrayIndexOutOfBoundsException:+e.getMessage());}catch(IOExceptione){System.err.println(CaughtIOException:+e.getMessage());}第五章异常处理例子:185.3异常处理finally语句的好处:try{打开文件...对数组操作...}catch(ArrayIndexOutOfBoundsExceptione){dosomething}catch(IOExceptione){dosomething}finally{if(文件打开)关闭文件elsedosomething}第五章异常处理195.3异常处理3.声明异常在有些情况下,一个方法并不需要处理它所生成的例外,而是向上传递,由调用它的方法来处理这些例外,这时就要用到throws子句。它包含在方法的声明中,其格式如下:returnTypemethodName([paramlist])throwsexceptionListExceptionList中可以声明多个例外,用逗号隔开。见例题:throwsException.java第五章异常处理205.3异常处理说明:如果异常没有在当前的try–catch中处理,则它必须将异常抛弃给上一级调用它的方法。如果异常被回溯到main方法仍旧没有处理,则程序将出错,终止运行。[注意]:对非运行时例外,必须捕获或声明。第五章异常处理215.4抛弃异常在捕获一个例外前,必须有一段Java代码生成一个例外对象并把它抛弃。抛弃例外的代码可以是:你的Java程序JDK中某个类,Java运行时系统。它们都是通过throw语句来实现的。throw语句的格式为:throwThrowableObject;例如:thrownewArithmeticExcption();第五章异常处理225.4抛弃异常例子:publicObjectpop()throwsEmptyStackException{Objectobj;if(size==0)thrownewEmptyStackException();obj=objectAt(size-1);setObjectAt(size-1,null);size--;returnobj;}第五章异常处理235.4抛弃异常我们还可以定义自己的例外类,并用throw语句来抛弃它。见例题:ExceptionDemo.java第五章异常处理245.5总结优点1.Java通过面向对象的方法进行例外处理,把各种不同的例外事件进行分类,体现了良好的层次性,提供了良好的接口。2.Java的例外处理机制使得处理例外的代码和“常规”代码分开,减少了代码的数量,增强了程序的可读性。见例子:异常优点1.doc第五章异常处理255.5总结优点续3.Java的例外处理机制使得例外事件可以沿调用栈自动向上传播,而不是C语言中通过函数的返回值来传播,这样可以传递更多的信息并且简化代码的编写。见例子:异常优点2.doc4.由于把例外事件当成对象来处理,利用类的层次性我们可以把多个具有相同父类的例外统一处理,也可以区分不同的例外分别处理,使用非常灵活。第五章异常处理265.5总结优点续例如:Exception-ArrayException-InvalidIndexException-ElementTypeException-NoSuchElementExceptioncatch(InvalidIndexExceptione){...}catch(ArrayExceptione){...}catch(Exceptione){...}第五章异常处理275.5总结原则1、对非运行时例外必须捕获或声明,而对运行时例外则不必,可以交给Java运行时系统来处理。2、对于自定义的例外类,通常把它做为类Exception子类,而不做为类Error的子类,因为Error类通常用于系统内严重的硬件错误。并且在多数情况下,不要把自定义的例外类作为运行时异常类RuntimeException子类。另外,自定义异常类的类名常常以Exception结尾。第五章异常处理285.5总结原则3、在捕获或声明例外时,要选取合适类型的例外类,注意例外的类层次,根据不同的情况使用一般或特殊的例外类。4、根据具体的情况选择在何处处理例外。是在方法内捕获并处理呢?还是用throws子句把它交给调用栈中上层的方法去处理?5、使用finally语句为例外处理提供统一的出口。第五章异常处理29作业见作业
共136篇文档
格式: ppt
大小: 120 KB
时间: 2020-02-12
本文标题:第五章-异常处理
链接地址:https://www.777doc.com/doc-3685929 .html