77范文网 - 专业文章范例文档资料分享平台

java实验指导书(9)

来源:网络收集 时间:2019-08-31 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

二.了解异常对象的类型

Java 中的异常类具有层次结构组织。其中,Throwable 类是Error 错误类和Exception 异常类的父类,它是Object 的直接子类。RuntimeException 运行时异常类是Exception 异常类的子类。如图8.1所示。

图8.1 异常类结构

1.Exception 异常类的子类

(1)RuntimeException 运行时异常类,主要包括以下异常子类:

·ArithmeticException 算术异常类:表示遇到了异常的算术问题,例如被0 整除。 ·ArrayStoreException 试图把与数组类型不相符的值存人数组。

·ClassCastException 类型强制转换异常类:试图把一个对象的引用强制转换为不合适的类型。

·IndexOutOfBoundsException 下标越界异常类:下标越界。

·NullPointerException 空指针异常类:试图使用一个空的对象引用。 (2)NoSuchMethodException 方法未找到异常 (3)java.awt.AWTException 图形界面异常类 (4)java.io.IOException 输入输出异常类 ·IOException:申请I/O 操作没有正常完成。

·EOFException:在输入操作正常结束前遇到了文件结束符。

·FileNotFoundException:在文件系统中,没有找到由文件名字符串指定的文件。 (5)Exception 异常类的其它子类

·EmptyStackException:试图访问一个空堆栈中的元素。 ·NoSuchFieldException:试图访问一个不存在的域。 ·NoSuchMethodException:试图访问不存在的方法。

·ClassNotFoundException:具有指定名字的类或接口没有被发现。

·CloneNotSupportedException:克隆一个没有实现Cloneable 接口的类。

·IllegalAccessException:试图用给出了完整的路径信息的字符串加载一个类,但是当前正在执行的方法无法访问指定类,因为该类不是public 类型或在另一个包中。 ·InstantiationException:试图使用Class 的newInstance 方法创建一个对象实例,但指定的对象没有被实例化,因为它是一个接口、抽象类或者一个数组。

·InterruptedException:当前的线程正在等待,而另一个线程使用了Thread 的interrupt 方法中断了当前线程。 2.Error 错误类的子类

(1)VirtualMachineError 虚拟机错误

OutOfMemoryError 内存溢出错误 StackOverflowError 栈溢出错误 (2) LinkageError 链接错误

NoClassDefNotFoundError 类定义未找到错误 (3) java.awt.AWTError 图形界面错误

40

三.使用try…catch 语句处理异常

1.异常类型匹配的处理方式

(1)程序功能: 首先说明\这是一个异常处理的例子\然后在程序中主动产生一个 ArithmeticException 类型被0 除的异常,并用catch 语句捕获这个异常。最后通过 ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。

public class TestException{

public static void main(String[] arg3) {

System.out.println(\这是一个异常处理的例子\\n\try {

int i=10; i /=0;

}catch (ArithmeticException e) {

System.out.println(\异常是:\}

finally {

System.out.println(\语句被执行\} } }

(3)编译并运行程序,结果如图8.2 所示。

图8.2

注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。

2.异常类型不匹配的程序

(1)catch 语句中声明的异常类型不匹配的程序TestExcption.java,源代码如下。 public class TestExcption2{

public static void main(String[] args) {

System.out.println(“这是一个异常处理的例子\\n”); try {

int i=10; i /=0;

}catch (IndexOutOfBoundsException e) {

System.out.println(\异常是:\}

finally {

System.out.println(\语句被执行\} } }

41

(2)编译并运行程序TestException2,结果如图8.3所示。

因为TestException2 程序试图捕获一个异常类为IndexOutOfBoundsException 的异常,但发生的异常却是ArithmeticException 类,所以,程序可以通过编译但在运行时,系统会给出异常报告:报告所发生的但没有被捕获的异常。不过在此之前,其它语句和finally 语句将会被执行。

图8.3

3.包含多个catch 子句的异常处理程序

(1)程序功能:在try 子句中设计两个可能出现的异常,当a 为0 时会发生异常。另外一个是肯定的异常,因为数组c 的长度为1,定义c[42]是为法的。通过两个catch 子句分别来捕获异常。

(2)编写包含多个catch 子句的TestCatc.java 程序,源代码如下。

public class TestCatch{

public static void main(String[] args) { try {

int a=args.length;

System.out.println(\int b=42/a; int c[]={1}; c[42]=99;

}catch (ArithmeticException e) {

System.out.println(\发生了被 0 除:\}catch (ArrayIndexOutOfBoundsException e) {

System.out.println(\数组下标越界:\} } }

(3)实验下面两种情况:

1) 在程序运行时不输入参数,则args.length 的值为0,这将引起一个被0 除异常。其结果如图8.4 所示。

图8.4

2) 在运行程序时,输入22,将不会引起被0除异常,但会引起一另一个异常即数组下标越界ArrayIndexOutOfBoundsException。因为整型数组只有一个元素c[0],程序中却要使用c[42],这将发生数组下标越界。运行结果如图8.5 所示。

42

图8.5

四.使用throw 语句抛出异常 1. throw 语句的作用

在上面的实验中,可以发现,异常对象是Java 运行时由系统抛出的。抛出异常也可以通过使用throw 语句实现。throw 是Java 语言的关键字,用来告知编译器此处要发生一个异常。throw 后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。

throw 语句格式为: <异常对象名()>; 程序会在throw 语句处立即终止,转向try?catch 寻找异常处理方法,不再执行throw 后面的语句。

2. throw 语句的使用

(1)编写带有throw 语句的程序TC5.java,源代码如下。

public class TestThrow {

static void throwProcess() { try {

throw new NullPointerException(\空指针异常\}catch (NullPointerException e) {

System.out.println(\在throwProcess 方法中捕获一个\

throw e; } }

public static void main(String args[]) {

try {

throwProcess();

}catch (NullPointerException e) {

System.out.println(\再次捕获:\}

}

(2)编译并运行程序,结果如图8.6 所示。

图8.6

(3)程序执行流程

程序首先调用throwProcess 方法,明确地抛出了一个NullPointerException 异常并将其命名为“空指针异常”。然后程序流程将转向throwProcess 方法中的catch 子句,输出一条信息。throwProcess方法的catch 子句又抛出了一个同样的异常e。然后结束throwProcess 方法的调用,执行main 方法中的catch 子句,再次捕获这个异常。

五.使用throws 子句 1.throws 子句的作用

43

throws 子句一般用来表明在使用该方法时可能抛出异常但不捕获的异常。异常由系统来处理。throws 子句可以指出抛出异常是RuntimeException 或自定义异常类,以便准备调用其它方法捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。

2.只是在方法中抛出异常的程序

对于程序中无法处理的异常,可以使用throws 子句在方法中抛出异常交由系统处理。 (1)程序功能:在程序中打开文件a3.txt,因为该文件可能不存在或路径不对,所以存在IOException 类型异常的可能,因此这里使用throws 来抛出异常。

import java.io.*;

public class TestThrows1{

public static void main (String args[]) throws IOException {

FileInputStream fis = new FileInputStream(\} }

(3)编译并运行程序,如果该文件在当前目录中不存在,将由系统自动给出异常报告,如图8.7所示。

图8.7

3.带有捕获处理的throws 子句 (1)程序功能:在这个程序中的mathod 方法中使用throws 子句抛出异常,在main 方法中捕获处理异常。

(2)TC6.java,源代码如下。

import java.io.*;

public class TestThrows2{

static void mathod() throws IllegalAccessException {

System.out.println(\在 mathod 中抛出一个异常\throw new IllegalAccessException(); }

public static void main(String args[]) { try {

mathod();

}catch (IllegalAccessException e) {

System.out.println(\在 main 中捕获异常:\} }

(3)编译并运行程序,结果如图8.8所示。

图8.8

六.使用finally 子句

44

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库java实验指导书(9)在线全文阅读。

java实验指导书(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/718999.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: