实验八异常处理

上传人:pu****.1 文档编号:465224469 上传时间:2023-10-19 格式:DOC 页数:9 大小:261.50KB
返回 下载 相关 举报
实验八异常处理_第1页
第1页 / 共9页
实验八异常处理_第2页
第2页 / 共9页
实验八异常处理_第3页
第3页 / 共9页
实验八异常处理_第4页
第4页 / 共9页
实验八异常处理_第5页
第5页 / 共9页
点击查看更多>>
资源描述

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

1、. .实验八 异常处理【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】了解Java 中异常处理exception的作用。掌握异常处理的设计方法。【实验要求】 理解系统异常处理的机制和创立自定义异常的方法。【实验步骤】一了解异常处理机制1错误与异常在程序执行期间,会有许多意外的事件发生。例如,程序申请内存时没有申请到、对象还未创立就被使用、死循环等,称为运行错误。根据错误的性质将运行错误分为错误与异常两种类型。1错误程序进入了死循环或内存溢出,这类现象称为错误或致命性错误。错误只能在编程阶段解决,运行时程序本身无法解决,只能依靠其

2、它程序干预,否那么会一直处于一种不正常的状态。2异常运算时除数为0,或操作数超出数据范围,翻开一个文件时发现文件不存在,网络连接中断等等,这类运行错误现象称为异常。对于异常情况,可在源程序中参加异常处理代码,当程序出现异常时,由异常处理代码调整程序运行流程,使程序仍可正常运行直到正常完毕。由于异常是可以检测和处理的,所以产生了相应的异常处理机制。而错误处理一般由系统承当。对于一个应用软件,异常处理机制是不可缺少的。程序员必须在程序中考虑每一个可能发生的异常情况并进展处理,以保证程序在任何情况下都能正常运行。事实证明,一个仔细设计了异常处理的程序,可以长时间的可靠运行,而不容易发生致命的错误,如

3、程序被迫关闭、甚至系统终止等等。所以学会进展异常情况处理对于想编写功能完善且具有实用价值的程序员来说是必不可少的。2异常发生的原因1Java 虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的:表达式的计算违反了Java 语言的语义,例如整数被0 除。在载入或Java 程序时出错。超出了某些资源限制,例如使用了太多的内存。2Java 程序代码中的throw 语句被执行。3异步异常发生。异步异常的原因可能有:Thread 的stop 方法被调用。Java 虚拟机内部错误发生。3异常处理机制发生异常后,怎么处理异常呢?Java 提供了异常处理机制来处理异常。分为两个步骤:1抛出异常

4、Java 是这样规定的:当语义限制被违反时,将会抛出throw异常,即产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。一个异常对象可以由Java 虚拟机来产生,也可以由运行的方法生成。异常对象中包含了异常事件类型、程序运行状态等必要信息。2捕获异常异常抛出后,运行时系统从生成异常对象的代码开场,沿方法的调用栈进展查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法为止,这个过程称为捕获catch异常。简单说异常处理机制就是:当语义限制被违反时,将会抛出异常对象,并将引起程序流程从异常发生点转移到程序员指定的处理异常方法代码处进展异常处理。

5、二了解异常对象的类型在异常发生后,系统会产生一个异常事件,生成一个异常对象,有哪些异常对象呢?这些异常对象来自哪些类呢?Java 中的异常类具有层次构造组织。其中,Throwable 类是Error 错误类和Exception 异常类的父类,它是Object 的直接子类。RuntimeException 运行时异常类是Exception 异常类的子类。如图7.1所示。图7.11.Exception 异常类的子类1RuntimeException 运行时异常类,主要包括以下异常子类:ArithmeticException 算术异常类:表示遇到了异常的算术问题,例如被0 整除。ArrayStore

6、Exception 数组下标越界异常类:试图把与数组类型不相符的值存人数组。ClassCastException 类型强制转换异常类:试图把一个对象的引用强制转换为不适宜的类型。IndexOutOfBoundsException 下标越界异常类:下标越界。NullPointerException 空指针异常类:试图使用一个空的对象引用。SecurityException 违背平安原那么异常类:检测到了违反平安的行为。2NoSuchMethodException 方法未找到异常3java.awt.AWTException 图形界面异常类4java.io.IOException 输入输出异常类IO

7、Exception:申请I/O 操作没有正常完成。EOFException:在输入操作正常完毕前遇到了文件完毕符。FileNotFoundException:在文件系统中,没有找到由文件名字符串指定的文件。5Exception 异常类的其它子类EmptyStackException:试图一个空堆栈中的元素。NoSuchFieldException:试图一个不存在的域。NoSuchMethodException:试图不存在的方法。ClassNotFoundException:具有指定名字的类或接口没有被发现。CloneNotSupportedException:克隆一个没有实现Cloneable

8、 接口的类。IllegalAccessException:试图用给出了完整的路径信息的字符串加载一个类,但是当前正在执行的方法无法指定类,因为该类不是public类型或在另一个包中。InstantiationException:试图使用Class 的newInstance 方法创立一个对象实例,但指定的对象没有被实例化,因为它是一个接口、抽象类或者一个数组。InterruptedException:当前的线程正在等待,而另一个线程使用了Thread 的interrupt 方法中断了当前线程。2Error 错误类的子类1VirtualMachineError 虚拟机错误l OutOfMemory

9、Error 内存溢出错误l StackOverflowError栈溢出错误2 LinkageError 错误l NoClassDefNotFoundError 类定义未找到错误3 java.awt.AWTError 图形界面错误三使用trycatch 语句处理异常1异常类型匹配的处理方式1程序功能:首先说明 这是一个异常处理的例子, 然后在程序中主动产生一个ArithmeticException 类型被0 除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage给出异常的具体类型并显示出来。2编写使用 trycatch

10、语句处理异常的程序文件LX7_1.java,源代码如下。public class LX7_1public static void main(String arg3) System.out.println(这是一个异常处理的例子n);try int i=10;i /=0;catch (ArithmeticException e) System.out.println(异常是:+e.getMessage();finally System.out.println(finally 语句被执行);3编译并运行程序,结果如图7.2 所示。图7.2注意:如果在catch 语句中声明的异常类是Exceptio

11、n,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。2异常类型不匹配的程序1编写一个catch 语句中声明的异常类型不匹配的程序LX7_2.java,源代码如下。public class LX7_2public static void main(String args) System.out.println(“这是一个异常处理的例子n);try int i=10;i /=0;catch (IndexOutOfBo

12、undsException e) System.out.println(异常是:+e.getMessage();finally System.out.println(finally 语句被执行);2编译并运行程序LX7_2,结果如图4.8 所示。因为LX7_2 程序试图捕获一个异常类为IndexOutOfBoundsException 的异常,但发生的异常却是ArithmeticException 类,所以,程序可以通过编译但在运行时,系统会给出异常报告:报告所发生的但没有被捕获的异常。不过在此之前,其它语句和finally 语句将会被执行。结果如图7.3 所示。图7.33包含多个catch

13、子句的异常处理程序1程序功能:在try 子句中设计两个可能出现的异常,当a 为0 时会发生异常。另外一个是肯定的异常,因为数组c 的长度为1,定义c42是为法的。通过两个catch 子句分别来捕获异常。2编写包含多个catch 子句的LX7_3.java 程序,源代码如下。public class LX7_3public static void main(String args) try int a=args.length;System.out.println(na = +a);int b=42/a;int c=1;c42=99;catch (ArithmeticException e) Sy

14、stem.out.println(发生了被 0 除:+e);catch (ArrayIndexOutOfBoundsException e) System.out.println(数组下标越界:+e);3实验下面两种情况:1在程序运行时不输入参数,那么args.length 的值为0,这将引起一个被0 除异常。其结果如图7.4 所示。图7.42在运行程序时,输入22,将不会引起被0除异常,但会引起一另一个异常即数组下标越界ArrayIndexOutOfBoundsException。因为整型数组只有一个元素c0,程序中却要使用c42,这将发生数组下标越界。运行结果如图7.5 所示。图7.5四使用throw 语句抛出异常1 throw 语句的作用在上面的实验中,可以发现,异常对象是Java 运行时由系统抛出的。抛出异常也可以通过使用throw 语句实现。throw 是Java 语言的关键字,用来告知编译器此处要发生一个异常。throw 后面要跟一个新创立的异常类对象,用于指出异常的名称和类型。throw 语句格式为: ;程序会在

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

当前位置:首页 > 医学/心理学 > 基础医学

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