java程序设计教程_第6章_第6章 习题答案
第6章 I/O流与异常
一、简答题
1.简述Error和Exception的区别与联系。
【答】Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行别无选择。Exception表示一种设计或实现问题,表示需要捕捉或者需要程序进行处理的异常。他处理的是因为程序的瑕疵而引起的问题,或者在外的输入等引起的一般性问题,是程序必须处理的;也就是说,他表示如果程序运行正常,从不会发生的情况。
2.简述异常处理的过程。
【答】有异常产生时,有两种方式处理异常:
(1) 抛出:
public voud f() throws Exception
(2) 使用try、catch和finally块处理异常:
try{
…
}catch(){
…
}finally{
…
}
异常分为检查时异常和非检查异常,调用需要抛出检查时异常的方法时必须捕获异常或者显示抛出异常,调用非检查异常抛出的方法时不用捕获或者显示抛出,但你也可这么做,非检查时异常是指继承RuntimeException或者Error的异常,除此之外继承Exception的异常叫做检查时异常
3.什么时运行时异常和非运行时异常,它们两者的区别是什么?
【答】所谓的运行时异常,可以这样理解:如果这种异常不捕获的话,程序还是能正常编译通过,只是在运行的时候,有可能会出现异常,导致程序无法正常运行,例如你说的那个例子就是运行时异常,当i=0的时候,它会报错,但是不等于0就可以正常通过。
所谓非运行时异常,又叫检查异常,这种异常是一定要捕获的,如果不捕获,程序无法正常编译。例如,你需要操作一个文件,在程序中你标记了文件的位置,但是在实际中,文件可能存在,也可能不存在,这时候需要捕获异常,处理当文件不存在的情况。
4.简述throw和throws的区别。
【答】throw用于方法体内,并且抛出(产生)一个异常类对象,而throws用在方法声明时用来指明方法可能抛出(不处理)的多个异常。
二、阅读程序题
1.阅读下列程序,描述程序的功能,如果文件“a.txt”中的内容为“Thank you!”,则程序的运行结果是什么?
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class TestJavaIO {
public static void main(String[] args) {
int b = 0;
long num = 0;
InputStream in = null;
try {
in = new FileInputStream("D:/a.txt");
} catch (FileNotFoundException e) {
System.out.println("文件找不到");
System.exit(-1);
}
try {
while ((b = in.read()) != -1) {
System.out.print((char) b);
num++;
}
in.close();
System.out.println();
System.out.println("共读取了" + num + "个字节");
} catch (IOException e) {
System.out.println("文件读取错误");
System.exit(-1);
}
}
}
【答】程序运行结果:
Thank you!
读取了10个字节
2.阅读下列程序,描述程序的功能,并写出程序的运行结果。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class TestObjectStream {
public static void main(String[] args) {
T t = new T();
t.k = 10;
try {
FileOutputStream fos = new FileOutputStream("D:/testObjectIo.bak");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("D:/testObjectIo.bak");
ObjectInputStream bis = new ObjectInputStream(fis);
T tReader = (T) bis.readObject();
System.out.println(tReader.i + " " + tReader.j + " " + tReader.d + " " + tReader.k);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e2) {
e2.printStackTrace();
}
}
}
class T implements Serializable {
int i = 2;
int j = 4;
double d = 2.5;
transient int k = 15;
}
【答】程序运行结果:
2 4 2.5 0
三、编程题
1.在D盘存在“Exercise6_1.txt”文件,文件的内容为“Hello World!”。创建一个File类的对象,然后创建文件字节流输入流对象fis,并且从输入流中读取文件“Hello.txt”的信息。
【答】
import java.io.*;
public class Exercise6_1 {
public static void main(String args[]) {
File f = new File("D:\\Exercise6_1.txt");
try {
byte bytes[] = new byte[512];
FileInputStream fis = new FileInputStream(f); //创建文件字节输入流
int rs = 0;
System.out.println("The content of Exercise6_1 is:");
while ((rs = fis.read(bytes, 0, 512)) > 0) {
//在循环中读取输入流的数据
String s = new String(bytes, 0, rs);
System.out.println(s);
}
fis.close(); //关闭输入流
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.在D盘存在文件“Exercise6_2.txt”,文件的内容为“今天心情非常好!”。使用InputStreamReader读取文件“Exercise6_2.txt”的内容。
【答】
import java.io.*;
public class Exercise6_2 {
public static void main(String args[]) {
try {
int rs;
File file = new File("D:\\", "Exercise6_2.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis);
System.out.println("The content of Exercise6_2 is:");
while ((rs = isr.read()) != -1) { // 顺序读取文件里的内容并赋值给整型变量b,直到文件结束为止。
System.out.print((char) rs);
}
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.在D盘创建文件“Exercise6_3.txt”,并且输入一些内容,用BufferedReader和BufferedWriter类实现从文件“Exercise6_3.txt”中读取数据,复制到文件文件“Exercise6_3back.txt”中,最终使两个文件内容相同。
【答】
import java.io.*;
public class Exercise6_3 {
public static void main(String args[]) {
try {
FileReader fr;
fr = new FileReader("D:\\Exercise6_3.txt");// 创建BufferedReader对象
File file = new File("D:\\Exercise6_3back.txt");
FileWriter fos = new FileWriter(file);// 创建文件输出流
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fos);// 创建BufferedWriter对象
String str = null;
while ((str = br.readLine()) != null) {
bw.write(str + "\n"); // 为读取的文本行添加回车
}
br.close();// 关闭输入流
bw.close();// 关闭输出流
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.在D盘创建文件“Exercise6_4.txt”,应用对象序列化知识将用户对象的信息保存到此文件中,之后将对象读入修改密码后再写回文件。
(1) 创建user类,构造方法中存在姓名、密码、年龄3个参数,并实现Serializable接口。
(2) 创建Exercise6_4类,将user类的对象写入“Exercise6_4.txt”文件中,之后读入该对象并修改用户密码。
【答】
import java.io.*;
import java.io.Serializable;
class user implements Serializable {
String name;
String password;
int age;
user(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
public void setpassword(String pass) {
this.password = pass;
}
}
public class Exercise6_4 {
public static void main(String args[]) {
user use = new user("Tom", "111", 21);//创建user类的对象
try {
FileOutputStream fos = new FileOutputStream("D:\\Exercise6_4.txt");
//创建输出流的对象,使之可以将对象写入文件中
ObjectOutputStream obs = new ObjectOutputStream(fos);
obs.writeObject(use);//将对象写入文件中
System.out.println("未修改写入文件的用户信息");
System.out.println("用户名:" + use.name); //打印文件中的信息
System.out.println("原密码:" + use.password);
System.out.println("年龄:" + use.age);
FileInputStream fis = new FileInputStream("D:\\Exercise6_4.txt");
//创建输入流的对象,使之可以从文件中读取数据
ObjectInputStream ois = new ObjectInputStream(fis);
use = (user) ois.readObject();//读取文件中的信息
use.setpassword("1111");//修改密码
System.out.println("修改之后文件中的信息");
//打印修改后的文件信息
System.out.println("用户名:" + use.name);
System.out.println("修改后的密码:" + use.password);
System.out.println("年龄:" + use.age);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.在编写程序过程中,如果希望一个字符串的内容全部是英文字母,若其中包含其他的字符,则抛出一个异常。因为在Java内置的异常类中不存在描述该情况的异常,所以需要我们自定义该异常类。
(1) 创建MyException异常类,此部分要求读者自己编写。
【答】
class MyException extends Exception {//继承Exception类
private String content;
public MyException(String content) {//构造方法
this.content = content;
}
public String getContent() {//获取描述信息
return this.content;
}
}
(2) 创建Exercise6_5类,在此类中创建一个带有String型参数的方法check(),该方法用来检查参数中是否包含英文字母以外的字符。若包含,则通过throw抛出一个MyException异常对象给check()方法的调用者main()方法。此部分代码已给出,要求根据下面的代码写出自定义类MyException的代码。
public class Exercise6_5 {
public static void check(String str) throws MyException {//指明要抛出的异常
char a[] = str.toCharArray();//将字符串转换为字符数组
int i = a.length;
for (int k = 0; k < i - 1; k++) { //检查字符数组中的每个元素
//如果当前元素是英文字母以外的字符
if (!((a[k] >= 65 && a[k] <= 90) || (a[k] >= 97 && a[k] <= 122))) {
//抛出MyException异常类对象
throw new MyException("字符串\"" + str + "\"中含有非法字符!");
}
}
}
public static void main(String[] args) {
String str1 = "HellWorld";
String str2 = "Hell!MR!";
try {
check(str1);//调用check()方法
check(str2);//执行该行代码时,抛出异常
} catch (MyException e) {//捕获MyException异常
System.out.println(e.getContent());//输出异常描述信息
}
}
}
×
确定
java程序设计教程_第6章_第6章 习题答案相关推荐
- python语言程序设计实践教程实验八答案_清华大学出版社-图书详情-《Java程序设计教程及实验指导》...
前言 Java程序设计教程及实验指导Java是一门主流的面向对象的程序设计语言,是面向对象程序设计教学的主流语言.本书由有多年教学经验的专业教师编写,分为教程以及实验与课程设计两部分.教程部分从Jav ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...
- Java程序设计教程与实训_Java程序设计教程与项目实训
Java程序设计教程与项目实训 编辑 锁定 讨论 上传视频 <Java程序设计教程与项目实训>是2017年8月清华大学出版社出版的图书,作者是温秀梅.司亚超. 书 名 Java程序设 ...
- java程序设计教程与项目_Java程序设计教程与项目实训
书名:Java程序设计教程与项目实训 作者:温秀梅.司亚超 出版社:清华大学出版社 出版日期:2017/8/1 字数: 页数: 版次: ISBN:9787#302473701 定价:49.5 目录 章 ...
- 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
20172319 2018.10.12 <Java程序设计教程>第6周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
- c语言程序设计曾怡课件,谭浩强 C语言程序设计教程(由曾怡视频修改) 第8章 函数课件...
谭浩强 C语言程序设计教程(由曾怡视频修改) 第8章 函数课件 一般搬家时转盘与大梁间是固定的,开钻前应根据转盘对井架进行校正,如果中途换转盘,则要在空负荷下根据井架对转盘进行校正 一般搬家时转盘与大 ...
- 框架设计--第一章 Spring的基本应用--习题答案
摘要:微信搜索[三桥君] 课程介绍:"框架技术"是软件工程专业的核心课程,是本专业限选课,是Java 应用开发课程,是本专业学生就业的主要方向. 说明:框架设计其他章节的习题答案也 ...
- IBM-PC汇编语言程序设计(余朝琨 机械工业出版社)——课后习题答案
IBM-PC汇编语言程序设计(余朝琨 机械工业出版社)--课后习题答案 第五章 第六章 (本文档仅有第五章.第六章部分习题答案) 第五章 第六章 IBM-PC汇编语言程序设计(余朝琨 机械工业出版社) ...
- C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...
- java程序设计教程试题_java程序设计试题库.doc
java程序设计试题库.doc 还剩 67页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: <Java 语 ...
最新文章
- 专访旷视副总裁彭广平:旷视为何选择收购艾瑞思?
- 景安河南机房电力事故,部分主机和云服务器停机
- Python time 100 天以后的日期
- linux日记的监控与分析,linux下apache日志监控与分析——webalizer与awstat
- C++ primer 14章习题答案
- Object family not exist issue in Equipment download
- php删除文见,php如何删除文件夹
- SharePoint2013 2019性能及限制
- php短网址案例,php生成短网址原理与实例
- php oauth单点登陆,php单点登录
- 河北计算机应用对口升学,2019年河北省中等职业学校对口升学考试:计算机文化基础+计算机应用基础模拟试卷...
- wamp中php无法启动,wamp无法正常启动
- 搭建vue脚手架(vue-cli)--基于vue2.0版本
- QWebEngineView播放视频最大化
- 计算机组成原理 定点加法、减法 练习题
- 神经网络基础05-注意力机制总结
- Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针
- 从买域名,服务器到cdn分发,加速搭建网站空间最全教程(下)
- 某高人整理的Java就业面试题大全【1】
- 华为鸿蒙认证测试题,你能答对几道?