Java 输入输出(含部分答案) 下载本文

3、阅读下面的程序Test.java:

import java.io.*; public class Test{

public static void main(String argv[]){ Test t = new Test();

System.out.println(t.fliton()); }

public int fliton(){ try{

FileInputStream din = new FileInputStream(\ din.read();

}catch(IOException ioe){

System.out.println(\ return -1; }

finally{

System.out.println(\ }

return 0; } }

如果文件test.txt与Test.java在同一个目录下,test.txt中仅有一行字符串“hello world!”,上面的程序编译是否成功?如果编译出错,指出哪行出错,并说明理由;如果编译正确,运行结果是什么?

4、阅读下面的程序TestMonth.java: public class TestMonth{

public static void main(String []args){

try{

int month=Integer.parseInt(args[0]); if(month<0||month>12){

throw new ArithmeticException(\没有\月份!\}

System.out.println(\您输入的月份为\月份\}catch(ArrayIndexOutOfBoundsException e){

System.out.println(\请输入月份!\}catch(ArithmeticException e){

System.out.println(\捕获ArithmeticException异常\System.out.println(e.toString()); } } }

已知ArrayIndexOutOfBoundsException和ArithmeticException都是java.lang.*下的异常类,编译TestMonth.java后,用java TestMonth 13的运行结果是什么? 参考答案:

捕获ArithmeticException异常

13

java.lang.ArithmeticException:没有13月份! 5、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况 一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

7、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口

在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息, 调用这个对象的方法可以捕获到这个异常并进行处理。

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。 一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常, 这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

用try来指定一块预防所有“异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。 throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”

Finally为确保一段代码不管发生什么“异常”都被执行一段代码。可以在一个成员函数调用的外面写一个try语句,

时间是李寻欢手里的飞刀,当你突然感觉到它的存在,它已经结实的钉在你喉咙上了。 在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。 8、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。字节流继承于InputStream \\ OutputStream,字符流继承于InputStreamReader \\ OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

9、什么是java序列化,如何实现java序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。 可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。 序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,

implements Serializable只是为了标注该对象是可被序列化的, 然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,

接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),

14

要恢复的话则用输入流。 10、在Java中,以下的异常:java.lang.Excetion,java.lang.RuntimeException,java.lang.Error有什么区别?

Error类对象由Java虚拟机生成并抛出,Exception类对象由应用程序处理或抛出 error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

Error表示系统级的错误和程序不必处理的异常,

RuntimeException是Exception的子类,一般来说该异常是程序在运行时抛出这种错误编译是无法捕捉的,如果在程序中不加处理,在程序运行就会产生并上缴给JVM处理。

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。Java编译器要求方法必须声明抛出可能发生的非运行时异常同,但是并不要求必须声明抛出未被捕获的运行时异常。

exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

Exception表示需要捕捉或者需要程序进行处理的异常。 11.Java中异常处理机制、事件机制?

异常处理机制:

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。异常处理还有一个好处是在你不能确定 和处理异常时,你可以不处理,而把问题提交上去。另一方面,异常处理机制便利错误处理代码更有条理,更便于维护。

事件机制:

事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承java.util.EventLlistener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参数传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。有时,事件监听者不能直接实现事件监听者接口,或者还有其它和额外动作时,就要在一个源与其它一个或多个监听者之间插入一个事件适配器类的实例,来建立它们之间的联系。

四、编程题

1、编写一个java课的成绩统计程序,从键盘输入学生姓名和成绩,程序按成绩排出名次,并统计出最高分、最低分、平均分。学生的个数在程序运行前是未知数。

2、编写一个文件拷贝的程序,将文件C:\\test1.txt的内容拷贝到C:\\test2.txt中。 参考代码如下: import java.io.*;

public class CopyFile {

public static void main(String args[]){ FileInputStream from = null; FileOutputStream to = null; try {

from = new FileInputStream(\ to = new FileOutputStream(\

15

byte[] buffer = new byte[4096]; int bytes_read;

while ( (bytes_read = from.read(buffer)) != -1) { to.write(buffer, 0, bytes_read); }

from.close(); to.close();

}catch (IOException e) { e.printStackTrace();

}

} }

一个完整的copy文件的参考程序如下: import java.io.*; class CopyFile{

public boolean copy(String fromFileName, String toFileName,boolean override) { File fromFile = new File(fromFileName); File toFile = new File(toFileName);

if (!fromFile.exists() || !fromFile.isFile() || !fromFile.canRead()) { return false; }

if (toFile.isDirectory()) {

toFile = new File(toFile, fromFile.getName()); }

if (toFile.exists()) {

if (!toFile.canWrite() || override == false) { return false; } }

else {

String parent = toFile.getParent(); if (parent == null) {

parent = System.getProperty(\ }

File dir = new File(parent);

if (!dir.exists() || dir.isFile() || !dir.canWrite()) { return false; } }

FileInputStream from = null; FileOutputStream to = null; try {

from = new FileInputStream(fromFile); to = new FileOutputStream(toFile); byte[] buffer = new byte[4096]; int bytes_read;

while ( (bytes_read = from.read(buffer)) != -1) { to.write(buffer, 0, bytes_read);

16