JAVA讲义第6章.pdf
《JAVA讲义第6章.pdf》由会员分享,可在线阅读,更多相关《JAVA讲义第6章.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-111-第 6 章 Java异常处理6.1概 述异常就是在程序运行时由代码所产生的不正常状态。换句话说,异常就是一个运行错误。在不支持异常处理的计算机语言中,错误必须被人工进行检查和处理,这显然麻烦而低效。Java语言提供了异常处理机制,为方法的异常终止和出错处理提供了清楚的接口。异常(exception)也是异常事件(exceptional event)的简称,它是在程序运行中出现的违背指定正常流向的事件。许多不同种类的错误可以导致异常,从严重的硬件错误到简单的编程错误。当在 Java方法中发生这样的错误时,方法将创建一个异常对象,并把它交给运行系统处理,运行系统负责找到处理错误的代码并执
2、行之。异常对象包括关于异常的信息、类型和错误发生时程序的状态以及对该错误的详细描述。在 Java中,创建一个异常对象并把它送到运行系统叫做抛出异常。在抛出异常后,运行系统将寻找合适的方法来处理异常。如果产生的异常类与所处理的异常类一致,则认为找到了合适的异常处理方法。如果运行系统找遍了所有方法而没有找到合理的异常处理方法,则运行系统将终止Java程序的运行。异常处理也叫做捕捉异常。Java中的每个异常都是一个对象,它是 java.lang包中 Throwable 类或其子类的实例对象。Throwable 类有两个子类:Exception 类和 Error 类。Exception 类是可以被捕捉
3、并且可能恢复的异常类,也可以继承Exception 类生成自己的异常类。Error 类一般被认为是不可恢复和不可捕捉的异常类。6.2 异常的类型6.2.1异常类的层次结构通过本章的学习,主要了解异常的概念、作用和异常的产生,掌握怎样捕捉异常,怎样创建自己的异常类,以及怎样利用Java开发环境提供的异常类来处理程序中的异常。通过技能训练,掌握 Java语言中异常处理的基本技术。-112-图 6.1异常类的层次java 语言用继承的方式来组织各种异常。所有的异常都是Throwable 类或子类,而Throwable 类又直接继承于object类。Throwable 类有两个子类:Error 类与
4、Exception 类。Exception 类又进一步细分为RuntimeException(运行异常)类和Non-RuntimeException(非运行异常)类。图6.1 显示了各异常之间的继承关系。如果程序中可能产生非运行异常,就必须明确地加以捕捉并处理,否则就无法通过编译检查。与非运行异常不同的是,错误(Error)与运行异常(RuntimeException)不需要程序明确地捕捉并处理。6.2.2 Exception类及其子类Exception 类分为 RuntimeException(运行异常)类和Non-RuntimeException(非运行异常)类。1.运行异常运行异常表现在
5、Java运行系统执行过程中的异常,它是指Java程序在运行时发现的由 Java解释抛出的各种异常,包括算术异常、下标异常等等。表6-1 列出几种常见的异常。表 6-1几种常见的运行异常异常类名功能说明ArithmeticException除数为零的异常IndexOutOfBoundsException下标越界异常ArrayIndexOutOfBoundsException访问数组元素的下标越界异常StringIndexOutOfBoundsException字符串下标越界异常ClassCaseException类强制转换异常NullpointerException 当程序试图访问一个空数组中的
6、元素,或访问一个空对象中的方法或变量时产生的异常Java.lang.Non_RuntimeException Java.lang.Object Java.lang.Throwable Java.lang.Error Java.lang.Exception 各种错误子类Java.lang.RuntimeException各种运行异常子类各种非运行异常子类-113-2非运行时异常非运行时异常是由编译器在编译时检测是否会发生在方法的执行过程中的异常。非运行异常是Non-RuntimeException 及其子类的实例,可以通过 throws 语句抛出。Java在其标准包 Java.lang、java
7、.util、java.io、中定义的异常类都是非运行异常类。表 6-2列出了常见的非运行异常。表 6-2非运行异常异常类名功能说明ClassNotFoundException指定类或接口不存在的异常IllegalAccessException非法访问异常IOException输入输出异常FileNotFoundException找不到指定文件的异常ProtocolException网络协议异常SocketExceptionSocket操作异常MalformedURLException统一资源定位器(URL)的格式不正确的异常6.2.3 Error类及其子类Error 类定义了正常情况下不希望捕
8、捉的错误。在捕捉Error 子类时要多加小心,因为它们通常在出现灾难性错误时被创建。表6-3 列出一些常见的Error 异常类。表 6-3Error 异常类异常类名功能说明LinkageError动态链接失败VirtualMachineError虚拟机错误AWTError AWT 错误6.3 java异常产生与捕捉6.3.1产生异常通过下面两个引例来认识异常的产生。【引例 1】import java.io.*;class Exception1 public static void main(String args)FileInputStream fis=new FileInputStream(
9、text);int b;-114-while(b=fis.read()!=-1)System.out.print(char)b);fis.close();该引例的第6 行表明在一个文件“text”上建立文件输入流。运行此程序时,如果这个文件并不存在,就会产生异常。另外,第8 行是读此文件的内容,如果该文件不存在,则从此文件中读取数据时,也可能发生异常。【引例 2】class Exception2 public static void main(String args)int a=0,b=0;a=36/b;System.out.println(a=+a);从该引例的第6 行不难看出,除数为零。因
10、此,运行此程序时必然会发生除零溢出的异常事件,使程序无法继续运行。上面的两个引例都有或可能有异常产生。对于一些异常,在程序中必须对它进行处理,否则编译程序时会指出错误,如引例1;但对另一些异常,在程序中可以不做处理,而直接由运行系统来处理,如引例2。6.3.2 捕捉异常一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个方法就可以捕捉对应的异常。捕捉异常是通过try-catch-finally 语句实现的。其语法为:try 正常程序段,可能抛出异常;catch(异常类 1 异常变量)捕捉异常类 1 有关的处理程序段;catch(异常类 2 异常变量)捕捉异常类 2 有关的处理程序段;
11、-115-,finally 退出异常处理程序段;1.try try 用来监视它所在的程序块是否发生异常,如果发生异常就抛出它。对于系统产生的异常或程序块中未用try 监视所产生的异常,将一律被Java运行系统自动抛出它。2.catch catch用来捕捉 try 程序块所抛出的异常,并根据异常类型采取相应的方法进行处理。每个 try 程序块后面紧接着一个或多个catch 语句,用于捕捉try 程序块中所抛出的一个或多个异常。catch 语句只需要一个形式参数,参数类型给出它能够捕捉的异常类型,这个类必须是Throwable 的子类,运行时系统通过参数值把被抛出的异常对象传递给catch块,在
12、catch 块中是对异常对象进行处理的代码。【例 6.1】捕捉引例 1 中的异常。import java.io.*;class Exception3 public static void main(String args)try FileInputStream fis=new FileInputStream(text);int b;while(b=fis.read()!=-1)System.out.print(char)b);fis.close();catch(FileNotFoundException e)System.out.println(e);catch(IOException e)S
13、ystem.out.println(e);-116-这里使用了两个catch语句分别对 try 代码块中可能出现的两个异常事件进行处理。第一种情况,如果要打开的文件“text”在当前目录中不存在,程序运行时会抛出一个 FileNotFoundException 异常对象,由于第一个catch 语句与该异常类型匹配,所以程序将执行第一个catch语句,于是就会显示下面的信息:java.io.FileNotFoundException:text(系统找不到指定的文件。)一般地,程序中如果有多个catch语句,那么,若有一个 catch 语句的异常类与抛出的异常对象匹配,那么,此catch 语句将被
14、执行,其他catch语句将被忽略。此例中,由于第一个 catch 语句首先得到匹配,第二个 catch语句将不会被执行。因此,在安排 catch语句的顺序时,首先应该捕捉最特殊的异常,然后再逐渐一般化。通常在指定所捕捉的异常类型时,应该避免选择最一般的类型(如Exception)。否则,当异常事件发生时,程序中不能确切判断异常的具体类型并做出相应处理以从错误中恢复。第二种情况,如果要打开的文件“text”在当前目录中存在,程序的运行结果会显示“text”文件中的内容。3Finally 捕捉异常的最后一步是通过finally 语句为异常处理提供一个统一的出口,使得在控制流转到程序的其他部分以前,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 讲义
限制150内