张元一实验三讲解.docx
- 文档编号:57941
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:19
- 大小:314.38KB
张元一实验三讲解.docx
《张元一实验三讲解.docx》由会员分享,可在线阅读,更多相关《张元一实验三讲解.docx(19页珍藏版)》请在冰豆网上搜索。
张元一实验三讲解
实验三异常处理和文件读写
【开发语言及实现平台或实验环境】
Windows2000或XP,JDK1.6与Eclipse
【实验目的】
1.掌握包、接口、异常处理的设计方法。
2.掌握输入输出流类。
【实验要求】
1.了解Java系统包的结构。
2.理解系统异常处理的机制和创建自定义异常的方法。
3.掌握不同类型的输入输出流类,标准数据流、文件流、数据输入输出流、对象流等。
【实验步骤】
一.了解异常处理机制,使用try…catch语句处理异常
1.异常类型匹配的处理方式
(1)程序功能:
首先说明"这是一个异常处理的例子",然后在程序中主动产生一个
ArithmeticException类型被0除的异常,并用catch语句捕获这个异常。
最后通过
ArithmeticException类的对象e的方法getMessage给出异常的具体类型并显示出来。
(2)编写使用try…catch语句处理异常的程序文件LX4_6.java,源代码如下。
publicclassLX4_6{
publicstaticvoidmain(String[]args){
System.out.println("这是一个异常处理的例子\n");
try{
inti=10;
i/=0;
}catch(ArithmeticExceptione){
System.out.println("异常是:
"+e.getMessage());
}
finally{
System.out.println("finally语句被执行");
}
}
}
(3)编译并运行程序,分析说明运行结果。
注意:
如果在catch语句中声明的异常类是Exception,catch语句也能正确地捕获,这是因为Exception是ArithmeticException的父类。
如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。
除数为0,被catch捕获,输出:
异常是:
/byzero
然后跳转到finally语句:
finally语句被执行
2.异常类型不匹配的程序
(1)编写一个catch语句中声明的异常类型不匹配的程序LX4_7.java,源代码如下。
publicclassLX4_7{
publicstaticvoidmain(String[]args){
System.out.println(“这是一个异常处理的例子\n”);
try{
inti=10;
i/=0;
}
catch(IndexOutOfBoundsExceptione){
System.out.println("异常是:
"+e.getMessage());
}
finally{
System.out.println("finally语句被执行");
}
}
}
(2)编译并运行程序,分析说明运行结果。
异常类型不匹配,出现错误后向上一级exception抛出,IndexOutOfBoundsException若改为:
Exception,则可以被catch捕获如图:
3.包含多个catch子句的异常处理程序
(1)程序功能:
在try子句中设计两个可能出现的异常,当a为0时会发生异常。
另外一个是肯定的异常,因为数组c的长度为1,定义c[42]是非法的。
通过两个catch子句分别来捕获异常。
(2)编写包含多个catch子句的LX4_8.java程序,源代码如下。
publicclassLX4_8{
publicstaticvoidmain(String[]args){
try{
inta=args.length;
System.out.println("\na="+a);
intb=42/a;
intc[]={1};
c[42]=99;
}
catch(ArithmeticExceptione){
System.out.println("发生了被0除:
"+e);
}
catch(ArrayIndexOutOfBoundsExceptione){
System.out.println("数组下标越界:
"+e);
}
}
}
(3)实验下面两种情况:
1)在程序运行时不输入参数,则args.length的值为0,分析运行结果。
2)在运行程序时,输入22,分析运行结果。
(1)
不输入数据,参数字长为0,除数为0,捕获异常
(2)
输入22,参数字长为1,只申请了长22的数组,42超出了范围,被第二个catch捕获抛出第二个异常
二.使用throw语句抛出异常
1.throw语句的作用
在上面的实验中,可以发现,异常对象是Java运行时由系统抛出的。
抛出异常也可以通过使用throw语句实现。
throw是Java语言的关键字,用来告知编译器此处要发生一个异常。
throw后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。
throw语句格式为:
程序会在throw语句处立即终止,转向try…catch寻找异常处理方法,不再执行throw后面的语句。
2.throw语句的使用
(1)编写带有throw语句的程序,源代码如下。
publicclassLX4_9{
staticvoidthrowProcess(){
try{
thrownewNullPointerException("空指针异常");
}
catch(NullPointerExceptione){
System.out.println("\n在throwProcess方法中捕获一个"+e.getMessage());
throwe;
}
}
publicstaticvoidmain(Stringargs[]){
try{
throwProcess();
}
catch(NullPointerExceptione){
System.out.println("再次捕获:
"+e);
}
}
}
(2)编译并运行程序,分析程序运行流程。
Try语句抛出异常e,被catch语句捕获后输出:
在throwProcess方法中捕获一个空指针异常
并再次抛出,之后再次被捕获输出:
再次捕获:
java.lang.NullPointerException:
空指针异常
三.使用throws子句
1.throws子句的作用
throws子句一般用来表明在使用该方法时可能抛出异常但不捕获的异常。
异常由系统来处理。
throws子句也可以指出抛出异常是RuntimeException或自定义异常类,即异常的类型,以便准备调用其它方法捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。
2.只是在方法中抛出异常的程序
对于程序中无法处理的异常,可以使用throws子句在方法中抛出异常交由系统处理。
(1)程序功能:
在程序中打开文件a3.txt,因为该文件可能不存在或路径不对,所以存在IOException类型异常的可能,因此这里使用throws来抛出异常。
(2)编写只是抛出异常的程序文件LX4_10.java,源代码如下。
importjava.io.*;
publicclassLX4_10
{
publicstaticvoidmain(Stringargs[])throwsIOException
{
FileInputStreamfis=newFileInputStream("a3.txt");
}
}
(3)编译并运行程序,如果该文件在当前目录中不存在,将由系统自动给出异常报告。
该目录中文件不存在,系统给出错误:
Exceptioninthread"main"java.io.FileNotFoundException:
a3.txt(系统找不到指定的文件。
)
atjava.io.FileInputStream.open(NativeMethod)
atjava.io.FileInputStream.
138)
atjava.io.FileInputStream.
93)
atLX4_10.main(LX4_10.java:
7)
3.带有捕获处理的throws子句
(1)程序功能:
在这个程序中的mathod方法中使用throws子句抛出异常,在main方法中捕获处理异常。
(2)TC6.java,源代码如下。
importjava.io.*;
publicclassLX4_11{
staticvoidmathod()throwsIllegalAccessException{
System.out.println("\n在mathod中抛出一个异常");
thrownewIllegalAccessException();
}
publicstaticvoidmain(Stringargs[]){
try{
mathod();
}catch(IllegalAccessExceptione){
System.out.println("在main中捕获异常:
"+e);}
}
}
(3)编译并运行程序。
Main中执行mathod()抛出错误,被catch捕获输出:
在main中捕获异常:
java.lang.IllegalAccessException
四.使用输入输出流类
1.使用标准数据流的应用程序
标准数据流指在字符方式下(如DOS提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
(1)程序功能:
将键盘上输入的字符在屏幕上显示出来。
(2)编写LX5_3.java程序文件,源代码如下。
classLX5_3{
publicstaticvoidmain(String[]args)throwsjava.io.IOException{
bytebuffer[]=newbyte[10];
System.out.println("从键盘输入不超过10个字符,按回车键结束输入:
");
intcount=System.in.read(buffer);//读取输入的字符并存放在缓冲区buffer中
System.out.println("保存在缓冲区buffer中元素的个数为:
"+count);
System.out.println("buffer中各元素的值为:
");
for(inti=0;i System.out.print(""+buffer[i]);//在屏幕上显示buffer元素的值 } System.out.println(); System.out.println("输出buffer字符元素: "); System.out.write(buffer,0,buffer.length); } } (3)编译LX5_3.java文件。 在命令提示符窗口运行LX5_3.class文件,并输入1234,分析结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 张元一 实验 讲解