201521123074 《Java程序设计》第9周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容。
2. 书面作业
本次PTA作业题集异常
Q1、常用异常
题目5-1
1.1 截图你的提交结果(出现学号)
**1.2 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?**
A:
- 经常出现数组越界异常:
ArrayIndexOutOfBoundsException
、空指针异常:NullPointerException
等。 - 不需要捕获。因为上述异常属于
unchecked exception
。一般都为编码错误,改进代码即可避免。
**1.3 什么样的异常要求用户一定要使用捕获处理?**
A:`Checked Exception`异常需要使用捕获处理。除了`Error`与`RuntimeException`及其子类以外的异常都是`Checked Exception`。
Q2、处理异常使你的程序更加健壮
题目5-2
2.1 截图你的提交结果(出现学号)
**2.2 实验总结**
A:
- 此题是
try-catch
的简单应用。在实验课上就完成了。 - 注意一点:当输入不为数字抛出异常后,计数器i应该减一,避免让其加到数组里。
Q3、throw与throws
题目5-3
3.1 截图你的提交结果(出现学号)
**3.2 阅读Integer.parsetInt源代码,结合3.1说说抛出异常时需要传递给调用者一些什么信息?**
A: 附`Integer.parsetInt`其中一部分源码如下
```
public static int parseInt(String s, int radix)
throws NumberFormatException
{if (s == null) {
throw new NumberFormatException("null");
}
if (radix < Character.MIN_RADIX) {
throw new NumberFormatException("radix " + radix +
" less than Character.MIN_RADIX");
}
- 可以看出在函数声明一开始时就写`throws NumberFormatException`,指明将要抛出的异常。
- 在每个if判断中,如: `throw new NumberFormatException("null");`满足if条件抛出异常。“()”里写抛出异常时想要说的一些声明。
<br/>
----------
**Q4、函数题
题目4-1(多种异常的捕获)
4.1 截图你的提交结果(出现学号)**

<br/>
**4.2 一个try块中如果可能抛出多种异常,捕获时需要注意些什么?**
A: 捕获时需注意:按照异常的范围/优先级进行捕获。如:此题中,`NumberFormatException`、`IllegalArgumentException`这两个异常都比`Exception`的优先级低(或者说Exception包含它们,范围最大是它们的父类),所以`Exception`异常要放在那两个异常之后。不然会出现捕获不到那两个异常的错误。
<br/>
----------
**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关闭资源。**
public static void main(String[] args) throws Exception {
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 (Exception e) {
System.out.println(e);
} finally {
if(fis!=null)
try {
fis.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
<br/>
**5.2 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源。**
public static void main(String[] args) throws Exception {
byte[] content = null;
try (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)); // 打印数组内容
}
} catch (Exception e) {
System.out.println(e);
}
}
运行结果:

<br/>
----------
**Q6、重点考核:使用异常改进你的购物车系统(未提交,得分不超过6分)
举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。
说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)**
A1: 这是一个是展示商品信息的类,商品信息已在txt文件里写好。
import java.io.File;
import java.io.FileReader;
public class show {
public static void main(String[] args) throws Exception
{ try{
File file = new File("d:\\goods.txt");
FileReader reader = new FileReader(file);
int lenth = (int)file.length();
char[] chars = new char[lenth];
reader.read(chars);
String txt = String.valueOf(chars);
System.out.println(txt);}catch(Exception e){
System.out.println(e);
System.out.println("请检查文件是否存在");
}
}
}
- 问题:有时候txt文件会被自己删掉或者是改名字什么的,就会抛出异常找不到文件的异常。
- 解决方案:加上try-catch语句。这里改一下文件的名字。

- 之后再进行修改,把文件名改回原来的。即能得到正确的商品信息

A2:这是一个购物车类中的添加到购物车方法。
class ShoppingCart {
ArrayList shoppingList=new ArrayList();
ArrayListpurchaseList=new ArrayList();
public void add(Stuff e){try{
if (e.Num==0)
shoppingList.add(e);}catch(Exception e1)
{
System.out.println(e1);
System.out.println("所选商品数量为0,不能加入购物车");
}
}
- 问题:当商品数量为0时,程序就崩溃了,加不进购物车里。
- 解决方案:加上try-catch语句。当商品数量为0时,抛出异常,并提醒使用者。

<br/>
----------
#3. 码云上代码提交记录
**题目集:异常**
**3.1. 码云代码提交记录**
**在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图**

201521123074 《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 ...
随机推荐
- Swoole笔记(四)
Process Process是swoole内置的进程管理模块,用来替代PHP的pcntl扩展. swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读 ...
- 汇编总结:mov指令
mov指令的作用: mov指令可能是汇编里用的最多的指令了,完成c语言里的赋值. mov指令种类: 1.普通的mov指令 2.做符号扩展的movs 3.做零扩展的movz 1.普通mov的种类有: m ...
- 第48篇 字符编码探密--ASCII,UTF8,GBK,Unicode
原文地址:http://blog.laofu.online/2017/08/22/encode-string/ ASCII 的由来 在计算机的“原始社会”,有人想把日常的使用的语言使用计算机来表示, ...
- Linux 修改用户名
0.使用root用户登录进行操作 1.删除用户相关进程 ps -ef | grep zheng236 2. 修改用户登录名 usermod zheng236 -l zheng 3.修改用户家目录 mv ...
- sql primary key 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主键. SQL PRIMARY KEY ...
- 最大流dinic模板
循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; in ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...
- [WPF] UserControl vs CustomControl
介绍 WPF中有两种控件:UserControl和CustomControl,但是这两者有什么区别呢?这篇博客中将介绍两者之间的区别,这样可以在项目中合理的使用它们. UserControl 将多个W ...
- macaca 测试web(2)
还是以博客园登录为例, 可以查看上一篇上一篇 这次只测试登录,使用ddt的数据驱动,这里我博客也有记录 地址 其实我在uiautomator +python 实现安卓自动化 一文当中我已经使用过ddt ...
- Python验证码通过pytesser识别
Python安装包: 需要安装的包主要有两个: PIL 和 pytesser .tesseract (1).安装PIL:下载地址:http://www.pythonware.com/products/ ...