Java 习题7和习题10 参考答案及解析
2017-07-04 14:13
423 查看
请说出下列程序的输出结果。
答案:你好
fine thanks
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出异常对象,导致该方法结束执行。try-catch语句捕获到这个异常,输出你好。
在执行try-catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行。
如果在try-catch语句中执行了return语句,那么finally子语句依然会被执行,
try-catch语句中执行了程序退出代码,即执行System.exit(0);,则不执行finally子语句。
(2)FileInputStream流的read方法和FileReader流的read方法有何不同?
(3)BufferedReader流能直接指向一个文件吗?
2.FileInputStream按字节读取文件,FileReader按字符读取文件。
3.不可以。
A. 创建File对象可能发生异常。
B. BufferedRead流可以指向FileInputStream流
C. BufferedWrite流可以指向FileWrite流
D.RadomAccessFile流一旦指向文件,就会刷新该文件
(2)为了向文件hello.txt尾加数据,下列哪个是正确创建指向hello.txt的流?
A. try{ OutputStream out = new FileOutputStream(“hello.txt”);
}
catch(IOException e){}
B. try { OutputStream out = new FileOutputStream(“hello.txt”,true);
}
catch(IOException e){}
C.try{ OutputStream out = new FileOutputStream(“hello.txt”,false);
}
catch(IOException e){}
D.try{ OutputStream out = new OutputStream(“hello.txt”,true);
}
catch(IOException e){}
创建File对象不会发生异常,创建新文件的时候会发生IOException异常。
BufferedRead流只能指向FileRead流,它们都是以字符读取数据的。
RadomAccessFile流指向文件时,不刷新文件。
(2)答案:B
FileOutputStream类是文件字节输出流,它是OutputStream类的子类,所以FileOutputStream的实例方法都是从OutputStream类继承来的,那么在这道题中需要使用上转型对象才能调用重写父类的方法,排除D。ABC在于FileOutpurStream的构造方法的不同,题目要求向文件尾加数据,A选项是具有刷新功能的构造方法,也就是会覆盖掉原来文件的数据,B选项参数为true表示不会刷新所指向的文件,而是从文件的末尾开始向文件写入数据,取值为false,输出流将刷新所指向的文件。
答案:【代码1】:3。【代码2】:abc。【代码3】:1。【代码4】:dbc。
getBytes方法将此字符串编码为字节序列,将结果存储到新的字节数组中,之后用输出流将字节数组a中的内容写入到了文件hello.txt中;之后声明一个新的byte数组com大小为3个字节,使用输入流的read方法,从数组com的第0个位置开始,依次从文件中读取3个字节写入数组中,返回实际读取的字节数目。所以【代码1】输出3;之后用声明一个String对象,使用了带三个参数的构造方法,从字节数组的第0个位置开始,提取出3个字节创建一个新的String对象;那么【代码2】输出的结果就是abc,只要不关闭流,每次调用read方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
所以再次调用read方法只读取了剩余的一个字符d写入到tom数组的第0个位置上,返回实际读取的字节数目为1,所以【代码3】返回1,此时再新声明一个String对象,还是从tom的第0个位置开始提取3个字节,那么输出的结果就应该是dbc。
import java.io.IOException; public class E { public static void main(String args[]) { try { methodA(); } catch (IOException e) { System.out.println("你好"); return; } finally { System.out.println("fine thanks"); } } public static void methodA() throws IOException { throw new IOException(); } }
答案:你好
fine thanks
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出异常对象,导致该方法结束执行。try-catch语句捕获到这个异常,输出你好。
在执行try-catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行。
如果在try-catch语句中执行了return语句,那么finally子语句依然会被执行,
try-catch语句中执行了程序退出代码,即执行System.exit(0);,则不执行finally子语句。
问答题
(1)如果准备按字节读取一个文件的内容,应当使用FileInputStream流还是FileReader流?(2)FileInputStream流的read方法和FileReader流的read方法有何不同?
(3)BufferedReader流能直接指向一个文件吗?
问答题解析
1.使用FileInputStream。2.FileInputStream按字节读取文件,FileReader按字符读取文件。
3.不可以。
选择题
(1)下列哪个叙述是正确的?A. 创建File对象可能发生异常。
B. BufferedRead流可以指向FileInputStream流
C. BufferedWrite流可以指向FileWrite流
D.RadomAccessFile流一旦指向文件,就会刷新该文件
(2)为了向文件hello.txt尾加数据,下列哪个是正确创建指向hello.txt的流?
A. try{ OutputStream out = new FileOutputStream(“hello.txt”);
}
catch(IOException e){}
B. try { OutputStream out = new FileOutputStream(“hello.txt”,true);
}
catch(IOException e){}
C.try{ OutputStream out = new FileOutputStream(“hello.txt”,false);
}
catch(IOException e){}
D.try{ OutputStream out = new OutputStream(“hello.txt”,true);
}
catch(IOException e){}
选择题解析
(1).答案:C创建File对象不会发生异常,创建新文件的时候会发生IOException异常。
BufferedRead流只能指向FileRead流,它们都是以字符读取数据的。
RadomAccessFile流指向文件时,不刷新文件。
(2)答案:B
FileOutputStream类是文件字节输出流,它是OutputStream类的子类,所以FileOutputStream的实例方法都是从OutputStream类继承来的,那么在这道题中需要使用上转型对象才能调用重写父类的方法,排除D。ABC在于FileOutpurStream的构造方法的不同,题目要求向文件尾加数据,A选项是具有刷新功能的构造方法,也就是会覆盖掉原来文件的数据,B选项参数为true表示不会刷新所指向的文件,而是从文件的末尾开始向文件写入数据,取值为false,输出流将刷新所指向的文件。
阅读程序题
请说出E类中标注的【代码1】~【代码4】的输出结果。import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class E { public static void main(String args[]) { int n = -1; File f = new File("hello.txt"); byte[] a = "abcd".getBytes(); try { FileOutputStream out = new FileOutputStream(f); out.write(a); out.close(); FileInputStream in = new FileInputStream(f); byte[] tom = new byte[3]; int m = in.read(tom, 0, 3); System.out.println(m); //【代码1】 String s = new String(tom, 0, 3); System.out.println(s); //【代码2】 m = in.read(tom, 0, 3); System.out.println(m); //【代码3】 s = new String(tom, 0, 3); System.out.println(s); //【代码4】 } catch (IOException e) { } } }
答案:【代码1】:3。【代码2】:abc。【代码3】:1。【代码4】:dbc。
getBytes方法将此字符串编码为字节序列,将结果存储到新的字节数组中,之后用输出流将字节数组a中的内容写入到了文件hello.txt中;之后声明一个新的byte数组com大小为3个字节,使用输入流的read方法,从数组com的第0个位置开始,依次从文件中读取3个字节写入数组中,返回实际读取的字节数目。所以【代码1】输出3;之后用声明一个String对象,使用了带三个参数的构造方法,从字节数组的第0个位置开始,提取出3个字节创建一个新的String对象;那么【代码2】输出的结果就是abc,只要不关闭流,每次调用read方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
所以再次调用read方法只读取了剩余的一个字符d写入到tom数组的第0个位置上,返回实际读取的字节数目为1,所以【代码3】返回1,此时再新声明一个String对象,还是从tom的第0个位置开始提取3个字节,那么输出的结果就应该是dbc。
相关文章推荐
- Java 习题3 参考答案及解析
- Java 习题1 参考答案及解析
- Java 习题2 参考答案及解析(2)
- Java 习题6 参考答案及解析
- Java 习题5 参考答案及解析(2)
- Java 习题9 参考答案及解析
- Java 习题4 答案及解析
- C语言程序设计习题参考答案
- Think in java 答案_Chapter 5_Exercise 10
- 《java how to program》第三版1-6章大部分习题答案[原创]
- ProgUseJava SampleExam-----PTJ_(01-08)_(reference answer参考答案)
- 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之一
- 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之二
- c语言 习题5.8参考答案(第二种解法,用switch语句)
- 2008年5月网络工程师考试下午试卷参考答案及考点解析2
- c#面试题目与参考答案(10)
- 2007年下半年系统分析师考试 上午试卷参考答案及试题解析
- Think in java 答案_Chapter 4_Exercise 10
- IBM java 英文面试题(附参考答案)
- Java陷阱一箩筐: 第一日答案与解析1