201521123055 《Java程序设计》第9周学习总结
1. 本章学习总结

2. 书面作业
Q.1常用异常
题目5-1
1.1 截图你的提交结果(出现学号)
1.2 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?
1.3 什么样的异常要求用户一定要使用捕获处理?
1.1
1.2
在我个人以前的代码里经常出现的是大多属于未检查异常,诸如数组越界这样的,这种异常通常需要捕获并处理而不是抛出,因为这是人为造成的错误,完全在我们的控制之中,这需要我们更好的在代码里处理这类错误,而不是说明这些错误的发生的可能性。
1.3
当我们覆盖了一个父类的方法,而这个父类方法没有抛出异常,那么子类重写的方法就必须捕获并处理代码中出现的每一个已检查异常。不允许子类抛出父类中所没有的异常。
Q2.处理异常使你的程序更加健壮
题目5-2
2.1 截图你的提交结果(出现学号)
2.2 实验总结
2.1

2.2
题目没什么难点,收获大概就是查看API发现各种异常的场景吧。
Q3.throw与throws
题目5-3
3.1 截图你的提交结果(出现学号)
3.2 阅读Integer.parsetInt源代码,结合3.1说说抛出异常时需要传递给调用者一些什么信息?
3.1

3.2
先贴上parsetInt方法的代码
public static int parseInt(String s, int radix)
throws NumberFormatException
此处抛出了一个NumberFormatException异常,再来看这个异常在API中的描述
Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.
简单来说就是,将一个格式不正确的字符串转换为整型时会出现错误,那我们来模拟一个出现该错误的场景,测试代码如下:
try{
System.out.println(Integer.parseInt("a123"));
}catch(NumberFormatException ex)
{
System.out.println(ex);
}
结果如下:
java.lang.NumberFormatException: For input string: "a123"
仔细来看这个打印结果给我们带来了哪些信息,首先是异常的类型,其次是异常的原因,这两点对于调用者来说是十分重要的,只要有了这两个信息,那么问题自然迎刃而解。
4.函数题
题目4-1(多种异常的捕获)
4.1 截图你的提交结果(出现学号)
4.2 一个try块中如果可能抛出多种异常,捕获时需要注意些什么?
4.1

4.2
需要注意异常类的继承关系,以该题为例,三种异常类型有着很明显的继承关系:

试将代码块做这样的调整:
catch(Exception ex)
{
System.out.println("number format exception");
System.out.println(ex);
}
catch(IllegalArgumentException ex)
{
System.out.println("illegal argument exception");
System.out.println(ex);
}
catch(NumberFormatException ex)
{
System.out.println("other exception");
System.out.println(ex);
}
运行发现报错,错误信息为:
Error:(105, 13) java: 已捕获到异常错误java.lang.IllegalArgumentException
Error:(110, 13) java: 已捕获到异常错误java.lang.NumberFormatException
说是已捕捉到后面两种异常,原因就是catch代码按顺序执行下来,之前已经捕获了Exception异常,而IllegalArgumentException与NumberFormatException都是其派生类,也就不需要捕获了。那么从这里我们可以得知,在捕获异常时,一定要处理好各类异常的继承关系,将“小”的放在前面,“大”的放在后面。
Q5.为如下代码加上异常处理
byte[] content = null;
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组内容
5.1 改正代码,让其可正常运行。注1:里面有多个方法均可能抛出异常。注2:要使用finally关闭资源。
5.2 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源.
5.1
byte[] content = null;
FileInputStream fis=null;
try {
fis=new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if (bytesAvailabe > 0) {
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组
}
catch(FileNotFoundException ex)
{
System.out.println(ex);
}
catch(IOException ex)
{
System.out.println(ex);
}
finally {
System.out.println("关闭资源");
try
{
fis.close();
} catch(IOException ex){
}
}
改进代码如上
5.2
try(FileInputStream fis=new FileInputStream("testfis.txt"))
{
byte[] content = null;
try {
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if (bytesAvailabe > 0) {
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组
}
catch(FileNotFoundException ex)
{
System.out.println(ex);
}
catch(IOException ex)
{
System.out.println(ex);
}
}catch(IOException ex){
ex.printStackTrace();
}
代码如上
Q6.重点考核:使用异常改进你的购物车系统(未提交,得分不超过6分)
举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。
说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)
找各种异常花了不少时间,不过确实也算是一种提高
在购物车的加入选项中,如果信息栏为空时点击加入选项则会报错,原因是读取信息栏内信息失败(为空),以下是修改后代码:
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
Commodity c=new Commodity(Integer.valueOf(jtx2.getText()),jtx3.getText(), Double.valueOf(jtx4.getText()));
shopcar.add(c);
}catch(Exception ex)
{
JOptionPane.showMessageDialog(null,"加入失败","提示消息",JOptionPane.WARNING_MESSAGE);
}
}
});
改进后,当信息栏为空时点击加入购物车选项,则会跳出提示窗口

当购物车为空时,应该有提示信息,原先的则没有,需要进行处理。
以下为修改后代码:
public void actionPerformed(ActionEvent e) {
try{
boolean result=false;
for(int i=0;i<shopcar.car.size();i++)
{
ja1.setText(shopcar.car.get(i).toString());
result=true;
break;
}
if(result==false)throw new NullPointerException();
}catch(NullPointerException ex)
{
JOptionPane.showMessageDialog(null,"购物车为空","提示消息",JOptionPane.WARNING_MESSAGE);
}
}
});
用一个弹窗显示消息:

3. PTA实验总结及码云上代码提交记录

201521123055 《Java程序设计》第9周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 再学ajax--第一天
今天写这个帖子就是是前几天在学ES6在学到Promise实现AJAX操作时,发现对ajax的一些知识点有些遗忘,所以就回头重新复习了一遍ajax,温故而知新. 主要有从4个方面去复习ajax,分析不透 ...
- Python实现使用tkinter弹出输入框输入数字, 具有确定输入和清除功能
Python3.6中用tkinter, 弹出可以输入数字的输入框. # Copyright (c) 2017-7-21 ZhengPeng All rights reserved. def pop_u ...
- 利用CSS简单布局的不同组合类型
关于CSS布局页面的简单组合方式: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- Eclipse快捷键:同时显示两个一模一样的代码窗口
如图: 同样的一个HTML文件,在代码编辑窗口,显示两个. 快捷键: Ctrl + Shift + -(减号) 既可以展示两个,也可以只显示一个 附加一个快捷键: Ctrl + Shift + ...
- .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- Java 图片处理解决方案:ImageMagick 快速入门
一.ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件,可以实现图片切割.颜色替换.图片缩略图.图片水印等各种效果.ImageMagick是免费开源软件,支持大多 ...
- VS2017 Cordova 出现错误 @ionic/app-scripts 未安装
在安装vs2017 Cordova中遇到出现错误 @ionic/app-scripts 未安装 在系统添加环境变量SASS_BINARY_PATH,将我们下载的win32-ia64-47_bindin ...
- 你以为你真的会用编辑器----之Emacs
Emacs... -------------------------- EMACS,即Editor MACroS(编辑器宏)的缩写,Emacs,著名的集成开发环境和文本编辑器.Emacs被公认为是最受 ...
- php Yii2图片的url自动加localhost
解决方法:在地址前加http://,这样url就是绝对地址,不加的话是相对地址,游览器会自动转换,即加localhost
- 我的acm vim 备忘
一.從命令到編輯模式 a :当前单词后面插入Appendi :当前位置插入Inserto :当前行下新开一行插入Open new lineA :当前行尾插入AppendI :当前行首插入InsertO ...