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周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. Jmeter - foreach控制器之嵌套使用

    有需求如下: 对某分类列表分别上传随机个数的附件内容 由此想到可以使用jmeter自带的foreach控制器来实现,编写代码如下: 如图:两层循环,第一层由上方beashell获取大类列表,如下: 生 ...

  2. re模块的结果小练习题

    1.匹配标签 import re ret = re.search('<(?P<tag_name>\w+)>\w+</(?P=tag_name)>','<h1& ...

  3. Go语言数组的使用

    Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...

  4. Big Data Solution in Azure: Azure Data Lake

    https://blogs.technet.microsoft.com/dataplatforminsider/2015/09/28/microsoft-expands-azure-data-lake ...

  5. js 日期大小比较

    <!DOCTYPE HTML><html><body><script>//获取起始日期 //转换为日期格式var startDate='2016-06- ...

  6. 盼盼Degenerate——清除浮动的方法

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  7. Oracle异常汇总

    持续更新中,可参见https://hnuhell.gitbooks.io/oracle_errmg/content/或https://hnuhell.github.io/Oracle_ERRMG/上的 ...

  8. 微服务从设计到部署(二)使用 API 网关

    链接:https://github.com/oopsguy/microservices-from-design-to-deployment-chinese 译者:Oopsguy 本书的七个章节是关于设 ...

  9. 新手学习SEO要做的七件事是什么?

    学习SEO可能不那么先进的编程,学习SEO不可能掌握网页设计,学习SEO不需要学习SEO DIV + CSS;不是一个困难的任务,但是在学习过程中,如果你想掌握SEO,那么我们要做的几件事. 1.学习 ...

  10. XSS分析及如何预防

    XSS分析及如何预防 简单说明: XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开 ...