张元一实验三DOC.docx

上传人:b****7 文档编号:15909001 上传时间:2023-07-08 格式:DOCX 页数:19 大小:318.23KB
下载 相关 举报
张元一实验三DOC.docx_第1页
第1页 / 共19页
张元一实验三DOC.docx_第2页
第2页 / 共19页
张元一实验三DOC.docx_第3页
第3页 / 共19页
张元一实验三DOC.docx_第4页
第4页 / 共19页
张元一实验三DOC.docx_第5页
第5页 / 共19页
张元一实验三DOC.docx_第6页
第6页 / 共19页
张元一实验三DOC.docx_第7页
第7页 / 共19页
张元一实验三DOC.docx_第8页
第8页 / 共19页
张元一实验三DOC.docx_第9页
第9页 / 共19页
张元一实验三DOC.docx_第10页
第10页 / 共19页
张元一实验三DOC.docx_第11页
第11页 / 共19页
张元一实验三DOC.docx_第12页
第12页 / 共19页
张元一实验三DOC.docx_第13页
第13页 / 共19页
张元一实验三DOC.docx_第14页
第14页 / 共19页
张元一实验三DOC.docx_第15页
第15页 / 共19页
张元一实验三DOC.docx_第16页
第16页 / 共19页
张元一实验三DOC.docx_第17页
第17页 / 共19页
张元一实验三DOC.docx_第18页
第18页 / 共19页
张元一实验三DOC.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

张元一实验三DOC.docx

《张元一实验三DOC.docx》由会员分享,可在线阅读,更多相关《张元一实验三DOC.docx(19页珍藏版)》请在冰点文库上搜索。

张元一实验三DOC.docx

张元一实验三DOC

实验三异常处理和文件读写

【开发语言及实现平台或实验环境】

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.(FileInputStream.java:

138)

atjava.io.FileInputStream.(FileInputStream.java:

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,分析结果。

最终有6个字符储存,前四个Ascll值为49,50,51,52,代表1,2,3,4,第五个13代表回车,第六个10代表换行

2.使用文件输入输出流的应用程序

(1)程序功能:

将保存在本地机当前文件夹中的LX5_1.HTML文本文件的内容在屏幕上显示出来,然后将其另存为LX5_1.txt文件。

(2)编写LX5_4.java程序文件,源代码如下。

importjava.io.*;

publicclassLX5_4{

publicstaticvoidmain(String[]args)throwsIOException{

FileReaderin=newFileReader("I:

//LX5_1.HTML");//建立文件输入流

BufferedReaderbin=newBufferedReader(in);//建立缓冲输入流

FileWriterout=newFileWriter("LX5_1.txt",true);//建立文件输出流

Stringstr;

while((str=bin.readLine())!

=null){

//将缓冲区内容通过循环方式逐行赋值给字符串str

System.out.printf("字符串str:

"+str);//在屏幕上显示字符串str

out.write(str+"\n");//将字符串str通过输出流写入LX5_1.txt中

}

in.close();

out.close();

}0

}

(3)编译并运行程序。

此为创建的LX5_1.HTML

3.使用随机文件类的应用程序

使用文件输入类FileReader只能将文件内容全部读入。

如果要选择读入文件的内容,可使用随机文件类RandomAccessFile。

(1)程序功能:

建立数据流,通过指针有选择的读入文件内容。

(2)编写LX5_5.java程序文件,源代码如下。

importjava.io.*;

classLX5_5{

publicstaticvoidmain(Stringargs[]){

Stringstr[]={"Firstline\n","Secondline\n","Lastline\n"};

try{

RandomAccessFilerf=newRandomAccessFile("I:

//LX5_1.HTML","rw");System.out.println("\n文件指针位置为:

"+rf.getFilePointer());

System.out.println("文件的长度为:

"+rf.length());

rf.seek(rf.length());

System.out.println("文件指针现在的位置为:

"+rf.getFilePointer());

for(inti=0;i<3;i++)

rf.writeChars(str[i]);//字符串转为字节串添加到文件末尾

rf.seek(10);

System.out.println("\n选择显示的文件内容:

");

Strings;

while((s=rf.readLine())!

=null)

System.out.println(s);

rf.close();}

catch(FileNotFoundExceptionfnoe){}

catch(IOExceptionioe){}

}

}

(3)编译并运行程序,分析运行结果。

生成LX5_1文件,并输出每一行内容

4.使用数据输入输出流与文件输入输出流类的应用程序

使用数据输出流DataOutputStream和数据输入流DataInputStream可以读取或写入任何Java类型的数据,不用关心它们的实际长度是多少字节。

一般与文件输入流FileInputStream和输出流类FileOutputStream一起使用。

(1)程序功能:

将整型数据和字符串对象通过数据输出流写到文件中。

将文件中的整型数据和字符串对象通过数据输出流读出,并在屏幕上显示文件中的内容。

(2)编写LX5_6.java程序文件,源代码如下。

importjava.io.*;

publicclassLX5_6{

publicstaticvoidmain(Stringarg[]){

try

{//添加方式创建文件输出流

FileOutputStreamfout=newFileOutputStream("LX5_6.txt",true);

DataOutputStreamdout=;

dout.writeInt

(1);

dout.writeChars("罗马"+"\n");

dout.writeInt

(2);

dout.writeChars("北京"+"\n");

dout.close();

}catch(IOExceptionioe){}

try{

;

DataInputStreamdin=newDataInputStream(fin);

inti=;

while(i!

=-1){

//输入流未结束时,输入流结束时i为-1

System.out.print(i+"");

charch;

while((ch=din.readChar())!

='\n')//字符串未结束时

;

System.out.println();

i=din.readInt();

}

;

}catch(IOExceptionioe){}

}

}

(3)编译并运行程序。

 

5.使用对象输入输出流的应用程序

使用对象流可以直接写入或读取一个对象。

由于一个类的对象包含多种信息,为了保证从对象流中能够读取到正确的对象,因此要求所有写入对象流的对象都必须是序列化的对象。

一个类如果实现了Serializable接口,那么这个类的对象就是序列化的对象。

Serializable接口没有方法,实现该接口的类不需要实现额外的方法。

(1)程序功能:

保存对象信息到文件,并将文件中的对象信息显示出来。

(2)编写LX5_7.java程序文件,源代码如下。

importjava.io.*;

publicclassLX5_7implementsSerializable//序列化接口

{

intbh=1;intnl=21;

Stringxm;

LX5_7(intbh,Stringxm,intnl)//构造方法

{

this.bh=bh;

this.xm=xm;

this.nl=nl;

}

LX5_7()//构造方法

{

this(0,"",21);

}

voidsave(Stringfname)//保存到文件中的方法

{

try

{

FileOutputStreamfout=newFileOutputStream(fname);//输出文件流

ObjectOutputStreamout=newObjectOutputStream(fout);//输出对象流

out.writeObject(this);//写入对象

out.close();

}catch(FileNotFoundExceptionfe){}

catch(IOExceptionioe){}

}

voiddisplay(Stringfname)//显示文件中对象信息的方法

{

try{

FileInputStreamfin=newFileInputStream(fname);//输入文件流

ObjectInputStreamin=newObjectInputStream(fin);//输入对象流

LX5_7OO=(LX5_7)in.readObject();//读取对象

System.out.println("类名:

"+OO.getClass().getName()+"

"+OO.getClass().getInterfaces()[0]);

System.out.println(""+OO.bh+""+OO.xm+""+OO.nl);

in.close();

}

catch(FileNotFoundExceptionfe){}

catch(IOExceptionioe){}

catch(ClassNotFoundExceptionioe){}

}

publicstaticvoidmain(Stringarg[])

{

Stringfname="LX5_7.obj";

LX5_7O1=newLX5_7(1,"张驰",14);

O1.save(fname);

O1.display(fname);

}

}

(3)编译并运行程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2