1、张元一实验三讲解实验三异常处理和文件读写【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Eclipse 【实验目的】1 掌握包、接口、异常处理的设计方法。2 掌握输入输出流类。【实验要求】1. 了解Java 系统包的结构。2. 理解系统异常处理的机制和创建自定义异常的方法。3掌握不同类型的输入输出流类,标准数据流、文件流、数据输入输出流、对象流等。【实验步骤】一了解异常处理机制,使用trycatch 语句处理异常1异常类型匹配的处理方式(1)程序功能: 首先说明 这是一个异常处理的例子, 然后在程序中主动产生一个ArithmeticException 类型被0 除
2、的异常, 并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。(2)编写使用 trycatch 语句处理异常的程序文件LX4_6.java,源代码如下。public class LX4_6public static void main(String args) System.out.println(这是一个异常处理的例子n);try int i=10;i /=0;catch (ArithmeticException e) System.out.println(异常是:+e.getMessage(
3、);finally System.out.println(finally 语句被执行);(3)编译并运行程序,分析说明运行结果。注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。除数为0,被catch捕获,输出:异常是:/ by zero然后跳转到finally语句:finally 语句被执行2异常类型不匹配的程序(1)编写一个catch 语句中声明的
4、异常类型不匹配的程序LX4_7.java,源代码如下。public class LX4_7public static void main(String args) System.out.println(“这是一个异常处理的例子n”);try int i=10;i /=0;catch (IndexOutOfBoundsException e) System.out.println(异常是:+e.getMessage();finally System.out.println(finally 语句被执行);(2)编译并运行程序,分析说明运行结果。异常类型不匹配,出现错误后向上一级exception抛
5、出,IndexOutOfBoundsException若改为:Exception,则可以被catch捕获如图:3包含多个catch 子句的异常处理程序(1)程序功能:在try 子句中设计两个可能出现的异常,当a 为0 时会发生异常。另外一个是肯定的异常,因为数组c 的长度为1,定义c42是非法的。通过两个catch 子句分别来捕获异常。(2)编写包含多个catch 子句的LX4_8.java 程序,源代码如下。public class LX4_8public static void main(String args) try int a=args.length;System.out.print
6、ln(na = +a);int b=42/a;int c=1;c42=99;catch (ArithmeticException e) System.out.println(发生了被 0 除:+e);catch (ArrayIndexOutOfBoundsException e) System.out.println(数组下标越界:+e);(3)实验下面两种情况:1) 在程序运行时不输入参数,则args.length 的值为0,分析运行结果。2) 在运行程序时,输入22,分析运行结果。(1)不输入数据,参数字长为0,除数为0,捕获异常(2)输入22,参数字长为1,只申请了长22的数组,42超出
7、了范围,被第二个catch捕获抛出第二个异常二使用throw 语句抛出异常1 throw 语句的作用在上面的实验中,可以发现,异常对象是Java 运行时由系统抛出的。抛出异常也可以通过使用throw 语句实现。throw 是Java 语言的关键字,用来告知编译器此处要发生一个异常。throw 后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。throw 语句格式为: ;程序会在throw 语句处立即终止,转向trycatch 寻找异常处理方法,不再执行throw 后面的语句。2 throw 语句的使用(1)编写带有throw 语句的程序,源代码如下。public class LX4_9
8、 static void throwProcess() try throw new NullPointerException(空指针异常);catch (NullPointerException e) System.out.println(n 在 throwProcess 方法中捕获一个+e.getMessage();throw e;public static void main(String args) try throwProcess();catch (NullPointerException e) System.out.println(再次捕获:+e);(2)编译并运行程序,分析程序运行
9、流程。Try语句抛出异常e,被catch语句捕获后输出 :在 throwProcess 方法中捕获一个空指针异常并再次抛出,之后再次被捕获输出:再次捕获:java.lang.NullPointerException: 空指针异常三使用throws 子句1throws 子句的作用throws 子句一般用来表明在使用该方法时可能抛出异常但不捕获的异常。异常由系统来处理。throws 子句也可以指出抛出异常是RuntimeException 或自定义异常类,即异常的类型,以便准备调用其它方法捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。2只是在方法中抛出异常的程序对于程序中无法处理的
10、异常,可以使用throws 子句在方法中抛出异常交由系统处理。(1)程序功能:在程序中打开文件a3.txt,因为该文件可能不存在或路径不对,所以存在IOException 类型异常的可能,因此这里使用throws 来抛出异常。(2)编写只是抛出异常的程序文件LX4_10.java,源代码如下。import java.io.*;public class LX4_10public static void main (String args) throws IOExceptionFileInputStream fis = new FileInputStream(a3.txt);(3)编译并运行程序,
11、如果该文件在当前目录中不存在,将由系统自动给出异常报告。 该目录中文件不存在,系统给出错误:Exception in thread main java.io.FileNotFoundException: a3.txt (系统找不到指定的文件。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:138) at java.io.FileInputStream.(FileInputStream.java:93) at LX4_10.main(LX4_10.j
12、ava:7)3带有捕获处理的throws 子句(1)程序功能:在这个程序中的mathod 方法中使用throws 子句抛出异常,在main 方法中捕获处理异常。(2)TC6.java,源代码如下。import java.io.*;public class LX4_11static void mathod() throws IllegalAccessException System.out.println(n 在 mathod 中抛出一个异常);throw new IllegalAccessException();public static void main(String args) try
13、mathod();catch (IllegalAccessException e) System.out.println(在 main 中捕获异常:+e);(3)编译并运行程序。Main中执行mathod()抛出错误,被catch捕获输出:在 main 中捕获异常:java.lang.IllegalAccessException四使用输入输出流类1. 使用标准数据流的应用程序标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。(1)程序功能:将键盘上输入的字符在
14、屏幕上显示出来。(2)编写LX5_3.java 程序文件,源代码如下。class LX5_3public static void main(String args) throws java.io.IOException byte buffer=new byte10;System.out.println(从键盘输入不超过10 个字符,按回车键结束输入:);int count =System.in.read(buffer);/读取输入的字符并存放在缓冲区buffer 中System.out.println(保存在缓冲区buffer 中元素的个数为:+count);System.out.println(buffer 中各元素的值为:);for (int i=0;icount;i+)System.out.print( + bufferi);/在屏幕上显示buffer 元素的值System.out.println();System.out.println(输出buffer 字符元素:);System.out.write(buffer, 0, buffer.length);(3)编译LX5_3.java 文件。在命令提示符窗口运行LX5_3.class 文件,并输入1234,分析结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1