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 ...
随机推荐
- Struts2传参碰到的奇怪问题
在使用Struts2框架,前端页面提交参数为日期时,Action中获取类型直接是Date 出现的问题是,局域网中无法访问,外网可正常访问. 把Action中Date类型换成String类型都可正常访问 ...
- js 小数计算为啥和想象中不一样!
今天遇到了一个比较有趣的事,如果要你计算0.1+0.2等于多少你会怎么回答? "0.3啊!"你可能都不会考虑.我也一样,当a=0.1,b=0.2时 if(a+b === 0.3){ ...
- Netty SSL安全配置
Netty SSL安全配置 [TOC] 摘要 在研发蜂鸟部署平台的过程中,涉及到平台网关和前置agent的通信加密,虽然目前软件在内网中,但是由于蜂鸟平台和agent的特殊性,一旦被控制,部署的软件就 ...
- 01、Mybatis快速入门
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- 【Ubuntu 16】DEB软件包管理
一.背景介绍 开源软件最早的时候没有软件包和软件包管理器,用户只能下载源码包自行配置 编译 安装. 后来linux各发行版本推出了软件包格式和软件包管理程序 Red Hat.Centos使用RPM格式 ...
- SpringMVC的@RequestParam的解释
自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaul ...
- win32 Message(MSG)消息处理
一般情况下的消息处理如下,TranslateMessage转换virtual-keys消息到characters消息,DispatchMessage调度一个消息给窗口程序. //getMessage第 ...
- ReactNative环境搭建扩展篇——安装后报错解决方案
之前一篇写了<逻辑性最强的React Native环境搭建与调试>说了RN的安装,今天在这里做一个复盘,让我们能够更直观更深入的了解React Native(以下简称RN),这一篇重点来说 ...
- MyBatis框架知识整理
MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring ...
- [2012-08-21]FreeBSD9.0体验记
最近在看<构建高可用Linux服务器> 由于对FreeBSD的稳定性仰慕已久,正好参照该书的指导进行体验一二. 先感谢下该书作者余大大,同时做个声明:本文中若有命令脚本涉及版权问题,请与p ...