异常处理和多线程

上传人:油条 文档编号:3395293 上传时间:2017-08-04 格式:DOC 页数:15 大小:572KB
返回 下载 相关 举报
异常处理和多线程_第1页
第1页 / 共15页
异常处理和多线程_第2页
第2页 / 共15页
异常处理和多线程_第3页
第3页 / 共15页
异常处理和多线程_第4页
第4页 / 共15页
异常处理和多线程_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《异常处理和多线程》由会员分享,可在线阅读,更多相关《异常处理和多线程(15页珍藏版)》请在金锄头文库上搜索。

1、第 5 章 异常处理和多线程异常处理机制是 Java 语言的重要特点之一。通过异常处理机制可以防止程序执行期间因出现错误而造成不可预料的结果。本章首先介绍 Java 语言的异常处理机制和异常类的继承结构,然后介绍异常处理语句及异常的抛出,最后还将介绍 Java 语言中的多线程及简单应用。5.1 异常与异常类异常(Exception)是程序执行期间发生的错误。在 Java 程序执行期间,产生的异常通常有三种类型:一是 Java 虚拟机由于某些内部错误产生的异常,这类异常不在用户程序的控制之内,也不需要用户处理这类异常;二是标准异常,这类异常通常是由程序代码中的错误产生的,例如被 0 除、数组下标

2、越界等,这是需要用户程序处理的异常;三是根据需要在用户程序中自定义的一些异常。5.1.1 异常处理机制在 Java 语言中,所有的异常都是用类表示的。当程序发生异常时,会生成某个异常类的对象。Throwable 是 java.lang 包中一个专门用来处理异常的类,它有两个直接子类:Error 和 Exception。Error 类型的异常与 Java 虚拟机本身发生的错误有关,用户程序不需要处理这类异常。程序产生的错误由 Exception 的子类表示,用户程序应该处理这类异常。Exception 中定义了许多异常类,每个异常类代表了一种执行错误,类中包含了对应于这种运行错误的信息和处理错误

3、的方法等内容。当程序执行期间发生一个可识别的执行错误时,如果该错误有一个异常类与之相对应,那么系统都会产生一个相应的该异常类的对象。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,从而保证用户程序在整个执行期间不会产生死机、死循环等异常情况。Java 语言采用这种异常处理机制来保证用户程序执行的安全性。5.1.2 异常类的继承结构Java 语言的 Exception 类的继承结构如图 51 所示。Exception 类的每一个子类代表一种异常,这些异常表示程序执行期间各种常见的错误类型,它是 Java 系统事先定义好的并包含在 Java 语言类库中,称为系统定义的执行异常。表 51

4、对一些常见的系统定义的执行异常做了简要说明。图 51 Exception 类的继承结构表 51 系统定义的执行异常系统定义的执行异常 异常对应的系统执行错误ArithmeticException 算术错误,如除数为 0ArrayStoreException 数组存储空间不足NullPointerException 访问一个空的对象中的方法或变量SecurityException 安全性错误,如 Applet 要读写文件ArrayIndexOutOfBoundsException 数组越界使用IOException 输入输出错误ClassNotFoundException 没有找到要装载使用的类

5、NoSuchMethodException 没有找到要调用的方法StringIndexOutOfBoundsException 字符串序号越界FileNotFoundException 没有找到指定的文件或目录UnknownHostException 无法确定主机的 IP 地址MalformedURLException URL 格式错误Exception 类的两个构造函数是:public Exception();public Exception(String s);其中,第二个构造函数可以接受字符串参数传入的信息,这个信息是对异常对象所对应的错误的描述。Exception 类也从父类 Thro

6、wable 那里继承了一些方法,最常用的两个方法是:public String toString();public void printStackTrace();其中,第一个方法是返回描述当前 Exception 类信息的字符串。第二个方法的主要功能是在屏幕上输出异常信息,这个异常信息是由 Java 系统对用户程序执行过程中产生的异常方法进行跟踪时产生的,并由 PrintStackTrace()方法输出到标准出错输出流,对于控制台程序来说,这个输出流就是屏幕。Java 程序在执行期间如果引发了一个 Java 系统能够识别的错误,就会产生一个与该错误相对应的异常类对象,这个过程称为抛出(thro

7、w)异常。所有Java 系统定义的执行异常都可以由系统自动抛出。下面的例子用来测试在数组越界时出现的异常。public class TestSystemException public static void main(String args) int num=new int3; for(int i=0;i4;i+) numi=i; System.out.println( num+i+=+i); 程序的运行结果如图 52 所示。图 52 运行结果上例所示的程序在执行期间,由于在进行第四次 for 循环时存在着数组越界的错误,所以将引发 ArrayIndexOutOfBoundsExceptio

8、n 异常。这个异常是Java 系统已经定义好的一个异常类,所以 Java 系统遇到这个错误就自动终止程序的执行,并新建立一个 ArrayIndexOutOfBoundsException 类的对象,也就是抛出了一个数组越界异常。5.2 异常的处理当程序在执行期间发生异常时,可以采取两种方法对异常进行处理。一是由 Java 语言的异常处理机制来完成处理工作,但是采用这种处理方法时用户预先无法得知程序是发生了何种异常,用户无法对可能发生的异常做出适当的处理;二是用户使用 Java 系统提供的 try-catch-finally 组合语句处理可能的异常。这样一方面可以允许用户修正错误,另一方面可以避

9、免因程序引起的异常而终止程序的执行。异常的处理通常由捕捉异常、程序流程的转移和异常处理语句块的定义 3 个执行步骤组成。5.2.1 捕捉异常当程序抛出一个异常时,程序中应该有专门的语句来接收这个被抛出的异常对象,这个过程被称为捕捉(catch)异常。当一个异常类的对象被捕捉和接收后,用户程序的执行流程就会发生转移,Java 系统中止当前的程序流程而转到专门用来处理异常的语句块,或者直接终止当前程序的执行而返回到操作系统状态。在进行程序设计时,为了避免因程序引起的异常而终止程序的执行,通常将监视异常的程序代码放在 try 语句块中。当程序代码出现异常时,这个 try语句块就启动 Java 系统的

10、异常处理机制来抛出一个异常对象,然后这个异常对象将被紧接在 try 语句块之后的 catch 语句块捕获。当异常对象被抛出后,程序的执行流程将按非正常、非线性的方式执行。如果此时在程序中没有匹配的 catch 语句块,那么程序将被终止而返回到操作系统状态。为了避免发生这种情况,Java 系统提供了 finally 语句块来解决这个问题。具体做法是,将 finally 语句块放在 try 与 catch 语句块之后,也就是说,不管异常对象被抛出还是没有被抛出,都将执行 finally 语句块。try-catch-finally 组合语句的一般语法格式如下:try / 可能发生异常的语句块 cat

11、ch(异常类名 异常形式参数名) /处理异常的语句块 finally /无论是否发生异常都要被执行的语句块 (1)catch 语句括号内的异常类名指明了用户程序想要捕捉的异常类型。当程序执行期间发生异常时,catch 语句块会捕捉这个异常,并以语句块内的程序代码来处理异常。(2)无论 try 语句块内的程序代码是否发生异常,finally 语句块内的程序代码都会被执行。需要说明的是,finally 语句块是可以省略的,而 try 语句块必须与 catch 或 finally 语句块之一配对使用。也就是说,try 语句块单独使用是没有意义的。/TestCatchException.java pu

12、blic class TestCatchException public static void main(String args) int num=new int2; try for(int i=0;i3;i+) numi=i; System.out.println( num+i+=+i); catch(ArrayIndexOutOfBoundsException e)System.out.println(数组下标越界引起的异常); e.printStackTrace(); finally System.out.println(程序执行期间发生了异常!); 程序的运行结果如图 53 所示。图

13、 53 运行结果5.2.2 异常的抛出上小节介绍的是如何使用异常处理机制来捕捉系统已经定义好的异常类的对象,这些异常发生时会由 Java 系统自动地抛出。同时,Java 系统还允许用户在程序中自己定义异常类,并且用 throw 语句抛出,这就为 Java 程序的设计带来了更大的灵活性。1. 用户自定义的异常类用户自定义的异常类一般通过继承 Exception 类的形式来实现。下面是一个自定义异常类的程序段:public class MyException extends Exception /类体 对于自定义的异常类,Java 系统是不会自动为用户抛出属于该类的对象的,用户必须在程序中使用关键

14、字 throw 来自行抛出异常对象。使用关键字 throw 的一般语法格式如下:throw 异常类对象;这里的“异常类对象”既可以是用户自定义的异常类,也可以是 Java 系统已经定义好的异常类。例如:TestThrowException.javaclass MyException extends Exception /自定义的异常类 String NewExceptionObject; public MyException() /构造函数 this.NewExceptionObject=; public MyException(String s) /构造函数 this.NewExceptio

15、nObject=s; String ShowExceptionInfo() /返回接收到的异常信息 return this.NewExceptionObject; public class TestThrowException public static void main(String args) try throw new MyException(这是一个自行抛出的异常 ! ); /抛出异常 catch(MyException e) System.out.println(MyException 类:); System.out.println(已经捕捉到抛出的异常对象!); System.o

16、ut.println(异常信息:+e.ShowExceptionInfo() ); 程序的运行结果如图 54 所示。图 54 运行结果说明:(1)在程序中自定义了一个新的异常类 MyException,该类自 Exception类继承而得,并定义了两个构造函数和一个用来显示接收到的异常参数“这是一个自行抛出的异常!”的方法 ShowExceptionInfo()。(2)在主类 TestThrowException 的定义中,try 语句块使用关键字 throw将属于 MyException 类的对象抛出。由于抛出的异常对象类型与 catch 语句括号中的异常类 MyException 相匹配,所以 catc

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

当前位置:首页 > 商业/管理/HR > 其它文档

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