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. error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值

    如果你的电脑上有两个不同版本的VS,或者你的程序拷贝到别人的电脑上去运行,或者你是从别人那里拷贝来的项目,而你们俩用的VS版本不一样,就会在运行的时候出现这个问题,这个错误中的v110是VS2012使 ...

  2. 集合-TreeSet-Comparator

    package com.bjpowernode.tree2; public class Student { private String name; private int age; public S ...

  3. 优化testng报告

    背景 搞过testng的同学都知道,testng自带的报告非常丑,而且有些字段的展示很不人性化,所以需要优化下报告 解决方案 尝试过一下开源的jar包,如ReportNG,奈何和目前使用的allure ...

  4. Unity 5.3.5f1 (32-bit) 的简单塔防游戏

    我以前使用过unity但是第一次写这么全面的塔防小游戏.我以后会陆续的将我跟过的一些项目的心得经验与体会发表出来希望各位能人能够给出评价,我在此感激各位的批评与赞扬.另外我只是一个学生学艺不精,粗制滥 ...

  5. 获取windows所有用户名

    #include <LM.h> #pragma comment(lib, "netapi32.lib") // See more: http://msdn.micros ...

  6. 浏览网页之Web服务器

    Web服务器... ----------------------------- 网站服务器响应用户请求 ========================= 浏览网页的时候需要翻越一道墙 Firewal ...

  7. 【JBoss】数据库连接配置小结(转)

    数据库驱动位置: %JBOSS_HOME%\server\default\lib目录下. 数据库配置文件位置:JBOSS_HOME\docs\examples\jca\XXXX-ds.xml < ...

  8. 数据结构-二叉树 C和C++实现

    二叉树,指针域具有两个下一节点的特殊链表结构. 先来看看它的结构 (此处补图) 来看程序中需要使用到的概念: 树根:二叉树的第一个节点 子树:对于某一个节点指针域指向的节点,左指针指向的节点为左子节点 ...

  9. 深入浅出数据结构C语言版(16)——插入排序

    从这一篇博文开始,我们将开始讨论排序算法.所谓排序算法,就是将给定数据根据关键字进行排序,最终实现数据依照关键字从小到大或从大到小的顺序存储.而这篇博文,就是要介绍一种简单的排序算法--插入排序(In ...

  10. ubuntu 14.04中安装phpmyadmin即mysql图形管理界面

    由于学习的需要,我将网站开发环境从windows转移到了ubuntu,ubuntu下之前并没有发现什么难的地方,只要百度一般都有解决方案.但是总所周知ubuntu是一系列开源软件的集合,由于版本的问题 ...