java-异常处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NCEPU异常机制2019年11月24日星期日NCEPU异常的概念在进行程序设计时,错误的产生是不可避免的如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解决的问题2019年11月24日星期日NCEPU所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的强壮性(robust),程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。异常的概念2019年11月24日星期日NCEPU{openTheFile;determineitssize;allocatethatmuchmemory;read-filecloseTheFile;}没有错误处理的程序2019年11月24日星期日NCEPUopenFiles;if(theFilesOpen){determinethelengthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readFailed)errorCode=-1;elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;以常规方法处理错误2019年11月24日星期日NCEPU程序可读性差,大量的错误处理代码混杂在程序中观察前面的程序,会发现大部分精力花在出错处理上只把能够想到的错误考虑到,此外的情况无法处理出错返回信息量太少,无法更确切的了解错误状况或原因以常规方法处理错误存在的问题2019年11月24日星期日NCEPU用异常的形式处理错误try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}try里写我们尝试着要做的事情,每一个catch针对一种可能的错误每一个错误都有相应的处理办法,并且将实现功能(事务逻辑)与错误处理分开来2019年11月24日星期日NCEPUJava异常是Java提供的用于处理程序中错误的一种机制。所谓错误是指在程序运行过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。Java的异常处理机制2019年11月24日星期日NCEPUJava程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。Java的异常处理机制2019年11月24日星期日NCEPUCatchanexceptionJava的异常机制的好处使我们在一个地方将精力集中在要解决的问题上,而在另一个地方处理来自那部分代码的异常情况。try{//Codethatmaymakeexception}catch(Type1id1){…}catch(Type1id1){…}try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}2019年11月24日星期日NCEPU如何处理ThrowanexceptionthrownewNullPointerException();异常发生时,你不能解决问题,所以必须抛出一个异常(throw)一个异常对象建立起来了当前运行的路径被停止,异常对象被弹出异常处理机直接管,开始寻找一个合适的地方来继续执行2019年11月24日星期日NCEPU把错误处理代码从常规代码中分离出来按错误类型分组(类Exception,派生)对无法预测的错误可以捕获和处理(基类,所有的异常类都是Exception类的子类)克服了传统方法错误信息有限的问题(getMessage)把错误传播给调用堆栈(比较:全局变量,返回值)异常机制的优点method1method2method3method4探测抛出异常传递捕获处理异常调用2019年11月24日星期日NCEPUe.printStackTace();2019年11月24日星期日NCEPU在异常被抛出的过程中,任何方法都可以捕获异常并进行相应的处理。2019年11月24日星期日NCEPU如果所有的方法都选择了抛出此异常,最后JVM将捕获它,输出相关的错误信息,并终止程序的运行。2019年11月24日星期日NCEPUJava通过面向对象的方法来处理程序错误,在Java中,错误被称为异常(Exception)(例外)Java处理错误的方法在一个方法的运行过程中,如果发生了异常,则这个方法(或者是Java虚拟机)生成一个代表该异常的对象(包含了该异常的详细信息),并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。2019年11月24日星期日NCEPUJava处理错误的方法我们把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)一个异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回朔,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。2019年11月24日星期日NCEPU当方法因为自身无法控制的原因而不能完成其任务文件不存在,网络连接无法建立……处理在方法、类库、类中抛出的异常如FileInputStream.read产生IOException在大的项目中采用统一的方式处理异常时如编写一个文字处理器异常应该是不经常发生但却可能发生的故障一定发生的事件不应该用例外机制来处理异常处理用于使系统从故障中恢复提示信息/不产生无效的结果/释放资源什么情况下使用异常机制2019年11月24日星期日NCEPU终止程序会导致资源泄漏,利用异常处理释放资源尽可能近地处理异常,这样程序清晰易读能在局部处理的错误不要使用异常机制异常机制的处理比正常处理效率低处理异常时的注意事项2019年11月24日星期日NCEPUContents1.异常处理2.异常分类3.抛出异常4.创建异常类2019年11月24日星期日NCEPU1错误与异常在程序运行时,经常会出现一些非正常的现象,如死循环、非正常退出等,称为运行错误。根据错误的性质将运行错误分成两类:错误和异常。2019年11月24日星期日NCEPU1错误与异常一、错误错误是致命性的,即程序遇到了非常严重的不正常状态,不能简单地恢复执行。例如:程序进入了死循环,或递归无法结束、或内存溢出。错误只能在编程阶段解决,运行程序本身无法解决,只能依靠其他程序干预,否则会一直处于非正常状态。2019年11月24日星期日NCEPU1错误与异常二、异常异常是非致命性的,通过某种修正后,程序还能继续执行。例如:运算时除数为0,或操作数超出数据范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等等。在源程序中加入处理异常的代码,当程序运行中出现异常时,由异常处理代码调整程序运行方向,使程序仍然可以继续运行直至正常结束。致命性的、程序自身无法解决的严重的运行错误,叫作错误;例如死循环、内存溢出,等非致命性的,可以由程序中的异常处理代码解决,程序还能继续正常运行的运行错误,叫作异常。例如数组下标越界、除数为0,等。2019年11月24日星期日NCEPU1错误与异常Java通过错误类(Error)和异常类(Exception)来处理错误和异常,它们都实现了Throwable接口。ObjectThrowableError错误类Exception异常类异常类Exception:当发生异常时,产生一个异常事件,生成一个异常对象(Exception类或其子类对象),并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。这个过程称为抛出一个异常。异常类Exception:Exception类有各种不同的子类,分别对应不同类型的异常,如除数为0的算术异常,数组下标越界异常,空指针异常等。异常类Exception:一个异常对象可以由Java虚拟机生成,也可以由运行的方法生成。异常对象中包含了异常事件类型、程序运行状态等必要的信息。异常类Exception:异常被抛出后,运行时系统把从生成对象的代码开始,沿着方法的调用栈逐层回溯查找,直到找到相应的处理方法,并把异常对象交给该方法为止.这个过程叫作捕获一个异常。简单地说:发现异常的代码可以“抛出”一个异常,运行系统“捕获”该异常,交由程序员编写的相应代码进行异常处理。错误类Error:(代表编译期和系统错误)Error类对象由Java虚拟机生成并抛出给系统,一般不由程序处理。死循环、递归无法结束、动态链接错误等。通常只能依靠其他程序干预,否则会一直处于非正常状态。2019年11月24日星期日NCEPU1异常处理一、异常的产生publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){inti=0;Stringgreetings[]={Helloworld!,No,Imeanit!,HELLOWORLD!!};while(i4){System.out.println(greetings[i]);i++;}}}greetings[0]=Helloworld!“greetings[1]=No,Imeanit!greetings[2]=HELLOWORLD!!i=0时,输出greetings[0]:Helloworld!i=1时,输出greetings[1]:No,Imeanit!i=2时,输出greetings[1]:HELLOWORLD!!i=3时,数组下标越界,此时系统报告异常对象类型:Exceptioninthreadmainjava.lang.ArrayIndexOutOfBoundsException:3atHelloWorld.main(HelloWorld.java:9)异常对象类型:数组越界异常类第几个数组下标越界发生异常的方法发生异常的类发生异常的行2019年11月24日星期日NCEPU2异常处理一、异常的产生publicclassTry1{publicstaticvoidmain(Stringargs[]){inti=0;inta[]={5,6,7,8};//简单类型不new也行for(;i5;i++){System.out.println(a[+i+]=+a[i]);}System.out.println(3/0=+(3/0));}}i=0时,输出:a[0]=5i=1时,输出:a[1]=6i=2时,输出

1 / 95
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功