java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理

上传人:E**** 文档编号:102545321 上传时间:2019-10-03 格式:PPTX 页数:36 大小:945.01KB
返回 下载 相关 举报
java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理_第1页
第1页 / 共36页
java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理_第2页
第2页 / 共36页
java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理_第3页
第3页 / 共36页
java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理_第4页
第4页 / 共36页
java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理》由会员分享,可在线阅读,更多相关《java语言程序设计实用教程(第2版)教学课件作者陈艳平第6章异常处理(36页珍藏版)》请在金锄头文库上搜索。

1、第6章 异常处理,Java语言程序设计,Java语言程序设计,第6章 异常处理,本 章 位 置,握异常的定义及其类型,1,掌握异常的处理机制,2,能力点,掌握对异常的处理,3,第6章 异常处理,Java语言程序设计,主要内容,1,异常和异常类,2,异常处理,3,案例分析,4,任务训练,Java语言程序设计,第6章 异常处理,6.1 异常和异常类,在编写程序的时候,不论是简单程序,还是具备一定功能的复杂程序,在编写调试过程中,经常会对有问题的代码进行调试,在语法无误的情况下有时也会出现程序得不到预期的效果,对此类问题,在Java语言中,通过异常来进行处理。 在Java语言中,程序运行出现的错误称

2、为“异常”或“例外”,Java语言用面向对象的方法通过异常处理机制来处理错误。,Java语言程序设计,第6章 异常处理,6.1.1异常的定义 在学习Java的异常概念之前,先看看下面的实例。 【例6-1】 Java系统对“除数为0”异常的处理。 package chapter06; public class MathDemo public static void main(String args) int a=0; int b=30/a; /除数为0 System.out.println(“b的值为:“+b); ,第6章 异常处理,6.1 异常和异常类,Java语言程序设计,在Java控制台上

3、出现了图6-1所示界面,Java语言中规定除数不能为0,违反这一规则后,程序就会非正常的中止(产生异常)。 如上,异常(Exception)就是在程序运行过程中所产生的意外事件,它中断指令的正常执行。异常的表现有多种形式:算术运算错误(被0除或数溢出)、数组下标越界、I/O错误、内存用完、找不到文件、网络连接错误等。,第6章 异常处理,6.1 异常和异常类,Java语言程序设计,6.1.2 J ava异常类及其层次结构 Java语言中,异常类是所有的“异常”的集合,Java中的异常对象是以类的层次结构进行组织的,异常就是这些异常类的实例。在异常类层次的最上层是Throwable(可抛出),用于

4、表示所有的“异常”情况,是所有的异常的一个共同的祖先。每个异常类都是Throwable类的子类。Throwable类有两个直接子类:Exception类和Error类,其中Exception类是用户程序能够捕捉到的异常情况,通过产生它的子类来创建异常;Error类描述的是系统内部错误,一旦错误产生,是程序无法处理的错误,表示运行的应用程序中有较严重问题。,第6章 异常处理,6.1 异常和异常类,Java语言程序设计,除了Java类库所定义的异常类之外,用户也可以通过继承已有的异常类来定义自己的异常类,并在程序中使用(利用throw产生,catch捕获)。 由图6-2可知,Java中的异常和错误

5、的区别在于异常能被程序本身可以处理,错误是无法处理的。Exception异常分两大类:运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。,第6章 异常处理,6.1 异常和异常类,Java语言程序设计,运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就

6、是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。 非运行时异常(编译异常):是RuntimeException以外的异常,但都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。表6-1、6-2和6-3分别描述了RuntimeException子类、IOException异常和其它常见异常产生的主要原因。,第6章 异常处理,6.1 异常和异常类,Java

7、语言程序设计,Company Logo,第6章 异常处理,6.1 异常和异常类,Java语言程序设计,Company Logo,第6章 异常处理,Java语言程序设计,6.1 异常和异常类,在程序执行代码时,发生了异常,程序会按照预定的处理方法对异常进行处理,异常处理完毕后,程序继续进行。 6.2.1 异常处理机制 Java的异常处理机制为程序提供了异常处理的能力。所谓异常处理就是在程序中预先想好对异常的处理办法,当程序运行出现异常时,对异常进行处理,处理完毕后,程序继续执行。 在Java应用程序中,异常处理机制为:抛出异常和捕获异常。异常被看作对象,必须是Throwable类及其子类所产生的

8、实例对象。当Java创建异常对象后,会发送给Java程序,这个动作称为抛出(throw)异常,程序捕捉到这个异常后,可以为该异常编写异常处理代码。 当运行得到异常对象时,系统将会寻找处理异常的方法,把当前异常对象交给该方法处理,这一过程称为捕获(catch)异常。如果没有主动可以捕获异常的方法,则系统将终止,程序退出运行状态。,第6章 异常处理,6.2 异常处理,Java语言程序设计,6.2.2 捕获异常 在Java中,异常通过try/catch/finally语句捕获。其一般语法形式为: try / 可能会发生异常的程序代码 catch (Type1 id1) /捕获并处理try抛出的第1个

9、异常类型 catch (Type2 id2) /捕获并处理try抛出的第2个异常类型 /多个异常捕获并处理的异常 / 捕获并处理try抛出的第n个异常类型 finally /无论是否发生异常,都将执行的语句块 ,第6章 异常处理,6.2 异常处理,Java语言程序设计,try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。 catch 块:用于处理try捕获到的异常。一个try块可能有多个catch块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型

10、或其子类的实例,就执行这个catch代码块,不会再执行其它的catch代码块。 finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。 try、catch、finally语句块的执行顺序: (1)当try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句; (2)当try捕获到异常,catch语句块里没有处理此异常的情况:当try语句块里的某条语句出现异常时,而没有处理此异常的catch语句块时,此异常将会抛给J

11、VM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行; (3)当try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配,找到与之对应的处理程序,其它的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句;,第6章 异常处理,6.2 异常处理,Java语言程序设计,提醒: (1)必须在try之后添加catch或f

12、inally块。try块后可同时接catch和finally块,但至少有一个块。 (2)必须遵循块顺序:若代码同时使用catch和finally块,则必须将catch块放在try 块之后。 (3)可嵌套 try-catch-finally 结构。,第6章 异常处理,6.2 异常处理,Java语言程序设计,【例6-2】捕捉throw语句抛出的“除数为0”异常。,Java语言程序设计,第6章 异常处理,6.2 异常处理,例6-2在try语句块中通过if语句进行判断,当“除数为0”的错误条件成立时引发ArithmeticException异常,创建 ArithmeticException异常对象,并

13、由throw语句将异常抛给Java运行时系统,由系统寻找匹配的异常处理器catch并运行相应异常处理代码,打印输出“程序出现异常,变量b不能为0。”try-catch语句结束,继续程序流程。 事实上,“除数为0”等ArithmeticException,是RuntimException的子类。而运行时异常将由运行时系统自动抛出,不需要使用throw语句。例6-2try语句块中,若将if语句去掉,程序运行时,会出现“除数为0”错误,引发ArithmeticException异常。运行时系统创建异常对象转而匹配合适的异常处理器catch,并执行相应的异常处理代码。 如例6-1所示,如果不捕捉、也不

14、声明抛出运行时异常会自动出现错误提示: Exception in thread “main“ java.lang.ArithmeticException: / by zero at chapter06.MathDemo.main(MathDemo.java:5),第6章 异常处理,6.2 异常处理,Java语言程序设计,2多重catch捕获异常 对于有多个catch子句的异常程序而言,应该尽量将捕获底层异常类的catch子句放在前面,同时尽量将捕获相对高层的异常类的catch子句放在后面。否则,捕获底层异常类的catch子句将可能会被屏蔽。例如: RuntimeException异常类包括运行

15、时各种常见的异常,ArithmeticException类和ArrayIndexOutOfBoundsException类都是它的子类。因此,RuntimeException异常类的catch子句应该放在最后面,否则可能会屏蔽其后的特定异常处理或引起编译错误。,第6章 异常处理,6.2 异常处理,Java语言程序设计,【例6-3】多重catch举例。,Java语言程序设计,第6章 异常处理,6.2 异常处理,在Java语言中,try语句是可以嵌套的,一个try语句的代码块中可以包含另外一个try语句。每当产生一个异常,将会先检查直接包抛出该异常的代码的try语句块,如果该语句块没有对该异常进行

16、处理,异常将会被送到上一级的try语句中进行处理,直到该异常被处理为止。,第6章 异常处理,6.2 异常处理,Java语言程序设计,【例6-4】try语句的嵌套使用。,Java语言程序设计,第6章 异常处理,6.2 异常处理,3try/catch/finally语句 finally语句块用来进行善后处理工作,完成一些资源释放,清理工作等。例如关闭try程序块中所打开的文件、断开网络连接等。,第6章 异常处理,6.2 异常处理,Java语言程序设计,【例6-5】带finally子句的异常处理程序。,Java语言程序设计,第6章 异常处理,6.2 异常处理,6.2.3 声明异常 声明异常是指一个方法不处理它产生的异常,而是向上传递,谁调用这个方法,这个异常就由谁处理。换句话说,异常的声明的作用是告知方法的调用者,此方法有未处理的异常发生,需要进行异常处理,这样,调用者就会做出相应的处理。声明异常的格式为: 修饰符方法名(参数列表)throws 异

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号