jave培训:例外(exception)处理.ppt
《jave培训:例外(exception)处理.ppt》由会员分享,可在线阅读,更多相关《jave培训:例外(exception)处理.ppt(57页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第六讲第六讲 例外(例外(Exception)处理)处理1、例外的概念例外的概念2、例外的分类例外的分类(Throwable/Exception)(Throwable/Exception)3、捕获例外捕获例外(try-catch-finally)(try-catch-finally)4、声明例外声明例外(throws)(throws)5 5、抛出例外、抛出例外(throw)(throw)6 6、创建自己的例外、创建自己的例外2021/9/2611、例外的概念例外的概念在进行程序设计时,错误的产生是不可避免的,如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解
2、决的问题。所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的鲁棒性(强壮性,robust),程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。2021/9/2621、例外的概念例外的概念在C语言中,通过使用if语句来判断是否出现了错误,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的错误事件并进行处理。但是,这种错误处理机制会导致不少问题,因为在很多情况下需要知道错误产生的内部细节。通常,用全局变量Errno来存储一个异常事件的类型,这容易导致误用,因为一个Errno的值有可能在被处理前被另外
3、的错误覆盖掉。此外,即使最优美的C语言程序,为了处理异常情况,也常常求助于goto语句。2021/9/263n 没有错误处理的程序没有错误处理的程序:openTheFileopenTheFile;determine its size;determine its size;allocate that much memory;allocate that much memory;read-file read-file closeTheFilecloseTheFile;1、例外的概念例外的概念2021/9/2641、例外的概念例外的概念n 以常规方法处理错误:以常规方法处理错误:openFiles;i
4、f(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;else errorCode=-3;else errorCode=-4;else errorCode=-5;2021/9/265 以常规方法处理错误存在的问题:以常规方法处理错误存在的问题:n观察前面的程序,大家会发现大部分精力花在
5、出错处理上了n 只把能够想到的错误考虑到,对以外的情况无法处理n 程序可读性差,大量的错误处理代码混杂在程序中n 出错返回信息量太少,无法更确切的了解错误状况或原因1、例外的概念例外的概念2021/9/2661、例外的概念例外的概念 Java通过面向对象的方法来处理程序错误,在Java中,错误被称为例外(Exception),有时也把例外称为异常有时也把例外称为异常。在一个方法的运行过程中,如果发生了例外,则这个方法(或者是Java虚拟机)生成一个代表该例外的对象(包含了该例外的详细信息),并把它交给运行时系统,运行时系统寻找相应的代码来处理这一例外。我们把生成例外对象并把它提交给运行时系统的
6、过程称为抛弃(throw)一个例外。运行时系统在方法的调用栈中查找,从生成例外的方法开始进行回朔,直到找到包含相应例外处理的方法为止,这一个过程称为捕获(catch)一个例外。2021/9/2671、例外的概念例外的概念n 用例外的形式处理错误:用例外的形式处理错误:trytry openTheFileopenTheFile;determine its size;determine its size;allocate that much memory;allocate that much memory;read-File;read-File;closeTheFilecloseTheFile;c
7、atchcatch(fileopenFailedfileopenFailed)dosomethingdosomething;catchcatch(sizeDetermineFailedsizeDetermineFailed)dosomething dosomething;catchcatch(memoryAllocateFailedmemoryAllocateFailed)dosomethingdosomething;catchcatch(readFailed)(readFailed)dosomethingdosomething;catchcatch(fileCloseFailedfileCl
8、oseFailed)dosomethingdosomething;finallyfinally dosomethingdosomething;2021/9/2681、例外的概念例外的概念例外机制的优点:n把错误处理代码从常规代码中分离出来n按错误类型和差别分组(类Exception,派生)n对无法预测的错误的捕获和处理(基类)n克服了传统方法的错误信息有限的问题(getMessage)n把错误传播给调用堆栈(比较:全局变量,返回值)method1method2method3method4探测抛出例外传递捕获处理例外调用2021/9/2691、例外的概念例外的概念什么情况下使用例外机制?什么情况
9、下使用例外机制?n当方法因为自身无法控制的原因而不能完成其任务n文件不存在,网络连接无法建立n处理在方法、类库、类中抛出的例外n如FileInputStream.read产生IOExceptionn在大的项目中采用统一的方式处理错误时n如编写一个文字处理器n例外应该是不经常发生但却可能发生的故障n一定发生的事件不应该用例外机制来处理n例外处理用于使系统从故障中恢复n提示信息/不产生无效的结果/释放资源2021/9/2610n不同的例外处理策略n关键性应用(处理所有例外)n实验软件(可以忽略许多例外)n处理例外时的注意事项n终止程序会导致资源泄漏,利用例外处理释放资源n尽可能近地处理例外,这样程
10、序清晰易读n能在局部处理的错误不要使用例外机制n例外机制的处理比正常处理效率低1、例外的概念例外的概念2021/9/26111、例外的概念例外的概念例外机制的关键步骤例外机制的关键步骤ntryn定义可能产生例外的代码段ncatch(Etypee)n用于捕获一个例外nfinallyn用于做统一的事后处理,如释放资源nthrowe;n用于抛出一个例外nthrowsEtype1,Etype2n用于声明方法可能抛出的例外类型throw/throwstry-catch-finally2021/9/26121、例外的概念例外的概念程序中的例外不外乎两种情况:一种是运行环境不能满足程序运行的要求而出错;一种
11、是程序要解决的问题的约束而导致的。不管是哪种情况,编写程序时,程序员要考虑到程序运行时可能遇到的各种情况(条件),并进行处理;如果不能处理,或者不知该如何处理,就可以认为是一种错误,这时,就需要交给别人去处理。以前,是通过返回错误代码来提示别人程序有错误;在Java中,则是通过例外机制通知别人出错信息。2021/9/26131、例外的概念例外的概念例外机制与常规的错误处理方法的不同之处在于:1、错误的表示方法:错误编码对象2、错误处理方法:与常规代码的分离、错误传递机制2021/9/26142、例外的分类例外的分类 一个例外是由一个对象来代表的,所有的例外都直接或间接地继承自Throwable
12、类。在Java类库的每个类包中都定义了例外类,这些例外类分成两大类:Error类及Exception类,后者是Java程序中需要大量处理的。除了Java类库所定义的例外类之外,用户也可以通过继承已有的例外类来定义自己的例外类,并在程序中使用(利用throw产生,throws声明抛出,catch捕捉并处理)。2021/9/2615n Error:由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,Java程序不做处理。n Runtime Exception:Java虚拟机在运行时生成的例外,如被0除等系统错误、数组下标超范围等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响太大。因
13、此由系统检测,用户可不做处理,系统将它们交给缺省的异常处理程序(当然,必要时,用户可对其处理)。n Exception:一般程序中可预知的问题,其产生的例外可能会带来意想不到的结果,因此Java编译器要求Java程序必须捕获或声明所有的非运行时异常。2、例外的分类例外的分类2021/9/26162、例外的分类例外的分类ThrowableErrorExceptionExceptionRuntimeException缺省的例外缺省的例外处理程序处理程序由用户捕获或由用户捕获或声明并处理声明并处理不做处理不做处理用户自己产生的例外用户自己产生的例外处理处理2021/9/26172、例外的分类例外的分
14、类Throwable类的方法类的方法nThrowable()nThrowable(Stringmessage)nStringtoString()n“classname”:“getMessage()”nStringgetMessage()nStringgetLocalizedMessage()nvoidprintStackTrace()nvoidprintStackTrace(PrintStreams)nvoidprintStackTrace(PrintWriters)nThrowablefillInStackTrace()ThrowableErrorExceptionExceptionRunt
15、imeException2021/9/261877:public static void main(String args)78:try 79:testThrowable();80:81:catch(Throwable t)82:System.err.println(t.toString();83:System.err.println(t.getMessage();84:System.err.println(t.getLocalizedMessage();85:t.printStackTrace();86:87:136:static void testThrowable()throws Thr
16、owable 137:throw new Throwable(测试测试 Throwable 的用法。的用法。);138:java.lang.Throwable:测试测试 Throwable 的用法。的用法。测试测试 Throwable 的用法。的用法。测试测试 Throwable 的用法。的用法。java.lang.Throwable:测试测试 Throwable 的用法。的用法。at test.Untitled1.testThrowable(Untitled1.java:137)at test.Untitled1.main(Untitled1.java:79)2021/9/261977:pu
17、blic static void main(String args)78:try 79:testThrowable();80:81:catch(Throwable t)82:System.err.println(t.toString();83:System.err.println(t.getMessage();84:System.err.println(t.getLocalizedMessage();85:t.printStackTrace(System.err);86:87:136:static void testThrowable()throws Throwable 137:throw n
18、ew Throwable();138:java.lang.Throwablenullnulljava.lang.Throwable at test.Untitled1.testThrowable(Untitled1.java:137)at test.Untitled1.main(Untitled1.java:79)2021/9/26202、例外的分类例外的分类一些常用的例外类一些常用的例外类nError(allinjava.lang)nLinkageErrornThreadDeathnVirtualMachineErrornInternalErrornOutOfMemoryErrornStac
19、kOverflowErrornUnknownErrornAWTError(injava.awt)n2021/9/2621nException(injava.lang)nClassNotFoundExceptionnCloneNotSupportedExceptionnInterruptedExceptionnnRuntimeExceptionnArithmeticExceptionnClassCastExceptionnInllegalArgumentExceptionnInllegalThreadStateExceptionnNumberFormatException2、例外的分类例外的分类
20、一些常用的例外类一些常用的例外类2021/9/2622nRuntimeExceptionnInllegalMonitorStateExceptionnInllegalStateExceptionnIndexOutOfBoundsExceptionnArrayIndexOutObBoundsExceptionnStringIndexOutObBoundsExceptionnNegativeArraySizeExceptionnNullPointerExceptionnSecurityExceptionnnEmptyStackException(injava.util)nMissingResour
21、ceException(injava.util)nNoSuchElementException(injava.util)n2、例外的分类例外的分类一些常用的例外类一些常用的例外类2021/9/2623nExceptionnIOException(injava.io)nCharConversionExceptionnEOFExceptionnFileNotFoundExceptionnInterruptedIOExceptionn2、例外的分类例外的分类一些常用的例外类一些常用的例外类2021/9/2624n 例外示例:例外示例:(1)编译时例外:在程序中必须对其进行处理,)编译时例外:在程序中
22、必须对其进行处理,否则编译器会指出错误。否则编译器会指出错误。在使用能够产生异常的方法而没有捕获和处理,程序将不能通过编译。(2)运行时例外:程序中可以不做处理,直接由)运行时例外:程序中可以不做处理,直接由运行时系统来处理。运行时系统来处理。2、例外的分类例外的分类2021/9/2625 Java的例外处理是通过3个关键词来实现的:try-catch-finally。用try来监视执行一段程序,如果出现例外,系统就会抛出(throws)例外,可以通过例外的类型来捕捉(catch)并处理它,或最后(finally)由缺省处理方法来处理。3、捕获例外捕获例外2021/9/2626ntry代码段包
23、含可能产生例外的代码ntry代码段后跟有一个或多个catch代码段n每个catch代码段声明其能处理的一种特定类型的例外n每个catch代码段都是一段例外处理代码n程序继续执行最后一个catch代码段后的代码(或执行完finally代码段后)n不同的代码段是不同的作用域,不可访问相互之间定义的局部变量trytry /接受监视的程序块接受监视的程序块,在此区域内发生在此区域内发生 /的异常的异常,由由catchcatch中指定的程序处理中指定的程序处理;/不能有其它语句分隔catchcatch(要处理的异常种类和标识符要处理的异常种类和标识符)/处理异常处理异常;catchcatch(要处理的异
24、常种类和标识符要处理的异常种类和标识符)/处理异常处理异常;finallyfinally /最终处理(缺省处理)最终处理(缺省处理);/Other Statements/Other Statements3、捕获例外捕获例外2021/9/26273、捕获例外捕获例外 try语句 捕获例外的第一步就是用try 语句指定了一段代码,该段代码就是一次捕获并处理例外的范围。在执行过程中,该段代码可能会产生并抛弃一个或多个例外,因此,它后面的catch语句进行捕获时也要做相应的处理。如果没有例外产生,所有的catch代码段都被略过不执行。2021/9/26283、捕获例外捕获例外 catch语句 每个tr
25、y语句必须伴随一个或多个catch语句,用于捕获try代码块所产生的例外并做相应的处理。catch语句有一个形式参数,用于指明其所能捕获得例外类型,运行时系统通过参数值把被抛弃的例外对象传递给catch语句。程序设计中要根据具体的情况来选择catch语句的例外处理类型,一般应该按照try代码块中例外可能产生的顺序及其真正类型进行捕获和处理,尽量避免选择最一般的类型作为catch语句中指定要捕获的类型。当然也可以用一个catch语句处理多个例外类型,这时它的例外类型应该是这多个例外类型的父类父类,但这种方式使得在程序中不能确切判断例外的具体类型。2021/9/2629public class E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jave 培训 例外 exception 处理
限制150内