最新Java实用教程第13讲异常处理和断言(共21张PPT课件).pptx
-
资源ID:24212639
资源大小:811.96KB
全文页数:21页
- 资源格式: PPTX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
最新Java实用教程第13讲异常处理和断言(共21张PPT课件).pptx
第第13讲讲 异常处理异常处理(chl)和断言和断言 13.1 java的异常的异常 13.2 异常处理机制异常处理机制(jzh) 13.3 捕获所有异常捕获所有异常 13.4 自定义异常自定义异常 13.5 异常的限制异常的限制 13.6 断言断言 13.7 本讲小结本讲小结第一页,共二十一页。 发现错误的最佳时机是编译阶段,但编译时期并不能找出所有错误,有些错误是在运行时刻才被发现,例如数组访问(fngwn)时越界,要访问(fngwn)的文件不存在等。这就需要在程序运行期间处理这些可能发生的错误。第二页,共二十一页。 13.1 Java的异常的异常(ychng)Java异常(ychng)类层次结构图第三页,共二十一页。第四页,共二十一页。13.2.1 捕获捕获(bhu)异常异常 在Java中,异常通过try-catch语句捕获 对于有多个catch子句的异常程序而言,异常类的catch子句放在前面,同时(tngsh)尽量将捕获相对“高层”(类继承层次中的父类)的异常类的catch子句放在后面第五页,共二十一页。13.2.2 finally try-catch语句后还可以跟finally子句,它表示(biosh)无论是否出现异常,都应当执行 下面几种情况,finally语句块不运行: (1)在finally语句块中发生了异常。 (2)在前面的代码中用了System.exit() (3)程序所在的线程死亡。 (4)关闭CPU。第六页,共二十一页。异常处理语句的语法规则(guz)总结: (1)必须在 try 之后添加 catch语句块或 finally 语句块,两种语句块最少有一个存在; (2)必须遵循顺序:若代码(di m)同时使用 catch 和 finally 块,则必须将 catch 语句块放在 try语句块之后; (3)一个try可以引导多个catch语句块; (4)try-catch-finally结构可嵌套使用;第七页,共二十一页。 (5)在try-catch-finally结构中,可重新抛出异常。 (6)除了下列情况(qngkung),finally语句块总要执行:在finally语句块中发生了异常;在前面的代码中用了System.exit()退出程序;程序所在的线程死亡;关闭CPU。第八页,共二十一页。异常处理语句执行顺序(shnx)总结:(1)当try没有捕获到异常时:try语句(yj)块中的语句(yj)逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句;(2)当try语句块里的某条语句出现异常,而没有处理此异常的catch语句块时,此异常将会抛给JVM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行;第九页,共二十一页。 (3)当try语句块里的某条语句出现异常,并且存在处理此异常的catch语句块时,程序将跳到catch语句块,从第一个catch语句块开始,从上到下找到与之对应(duyng)的catch,其它的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句第十页,共二十一页。13.2.3 声明声明(shngmng)异常异常如果一个方法可能会出现异常(ychng),但没有能力处理这种异常(ychng),或者想把异常(ychng)集中起来一块处理,可以使用关键字throws声明这个方法可能会产生异常。多个异常可使用逗号分割。throws语句的语法格式为:myMethod() throws Exception1,Exception2,.,ExceptionN 方法名后的throws Exception1,Exception2,.,ExceptionN 为声明要抛出的异常类型列表。第十一页,共二十一页。13.2.4 抛出抛出(po ch)异常异常JVM可以抛出异常(ychng),当需要抛出某个异常(ychng)时,也可以借助关键字throw来抛出某个异常对象。程序会在throw语句后立即终止,它后面的语句得不到执行第十二页,共二十一页。13.3 捕获捕获(bhu)所有异常所有异常因为向上转型,所有异常类对象都能够(nnggu)向上转型为Exception类型,所以通过捕获Exception类型,就可以捕获所有异常。如果有多个catch,最好把Exception类型语句放在所有catch的后面。第十三页,共二十一页。13.3.1 异常异常(ychng)轨迹轨迹可以调用Exception的父类Throwable中的方法获得异常的详细信息和调用栈轨迹:(1)void printStackTrace():将此throwable及其追踪输出至标准(biozhn)错误流。(2)void printStackTrace(PrintStream s):将此throwable及其追踪输出到指定的输出流。(3)void printStackTrace(PrintWriter s):将此throwable及其追踪输出到指定的PrintWriter。通过getStackTrace()方法可以获得printStackTrace()的信息第十四页,共二十一页。13.3.2 重新重新(chngxn)抛出异常抛出异常 有时希望把捕获的异常对象重新抛出,交给上一级环境中的异常处理程序去处理。异常对象被重新抛出后,所有(suyu)信息都能够被保持,所以在上一级的异常处理程序中能够得到原有异常对象的所有(suyu)信息。第十五页,共二十一页。13.3.3 异常异常(ychng)链链 捕获一个异常对象后抛出另外一个异常对象,并且希望把原异常对象抛出点的调用栈信息保存下来,这被称为异常链。 在JDK1.4之后,Throwable及其子类在创建异常对象时,都能够接收一个对象作为参数,这个参数能够表示(biosh)原始异常,能够传递给信息异常。通过异常链可以追踪到异常最初被抛出的地方。第十六页,共二十一页。 13.3.4 异常异常(ychng)的丢的丢失失 Java异常处理机制的设计也存在缺陷,就是(jish)异常会丢失13.4 自定义异常自定义异常(ychng) 使用Java类库中提供的异常类不能解决全部的问题,这时需要创建自定义的异常类,自定义异常类必须是Exception或其子类的派生类。第十七页,共二十一页。13.5 异常异常(ychng)的限制的限制(1)如果父类构造器有异常说明,那么子类构造器也必须声明(shngmng)抛出父类构造器中声明(shngmng)的那些异常。子类构造器的异常说明中可以有基类构造器中没有的异常说明。(2)如果父类的被重写方法没有异常说明,那么子类里的重写方法也不能有异常说明;如果父类的被重写方法有异常说明,那么子类里的重写方法中的定义要么没有异常说明,要么有的话则异常说明里的异常必须包含在父类被重写方法的异常说明里列出的那些异常之中。(3)如果子类不仅继承了一个父类还实现了一个或多个接口,而且该重写方法在两个或两个以上的接口(父类)中存在,那么子类中的重写方法声明抛出的异常应为存在该方法的那些接口(父类)中的该方法声明抛出的异常的交集。总之,如果方法被重写,要求被重写的方法一定不能声明抛出新的异常或比原方法范畴更广的异常。第十八页,共二十一页。13.6 断言断言(dunyn) JVM断言默认是关闭的。如在Eclipse里可以通过下面的步骤(bzhu)开启断言: Run - Run Configurations - Arguments页签 - VM arguments文本框中加上断言开启的标志:-enableassertions 或者-ea 。 断言的语法形式有两种形式: (1)assert condition; (2)asser condition:expr;第十九页,共二十一页。讲后练习讲后练习(linx) 1、运行时异常与一般异常有何异同? 2、error和exception有什么区别? 3、JAVA语言如何进行(jnxng)异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?第二十页,共二十一页。内容(nirng)总结第13讲 异常处理和断言。JVM可以抛出异常,当需要抛出某个异常时,也可以借助关键字throw来抛出某个异常对象。有时(yush)希望把捕获的异常对象重新抛出,交给上一级环境中的异常处理程序去处理。通过异常链可以追踪到异常最初被抛出的地方。Java异常处理机制的设计也存在缺陷,就是异常会丢失。1、运行时异常与一般异常有何异同第二十一页,共二十一页。