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 截图你的提交结果(出现学号)**
![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170421171638368-1503733228.png)
<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);
}
}
运行结果:
![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170422105813056-665262402.png)
<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语句。这里改一下文件的名字。
![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170422104846852-2117824635.png)
- 之后再进行修改,把文件名改回原来的。即能得到正确的商品信息
![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170422105016290-1946375627.png) 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时,抛出异常,并提醒使用者。
![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170422112202321-920039969.png) <br/> ---------- #3. 码云上代码提交记录 **题目集:异常** **3.1. 码云代码提交记录** **在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图** ![](http://images2015.cnblogs.com/blog/1109847/201704/1109847-20170422094939415-1452344666.png)

201521123074 《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. mysql explain和profiling

    语法:explain  select .... 变体: 1.explain extended select .... 将执行计划“反编译”成select语句: 运行show warnings 可以得到 ...

  2. c# 数组简述

    数组的声明与赋值:int[] a=new int[6]; 数组初始化器:int[] a=new int[2]{1,3}; 数组初始化器简化版:int[] a={1,3}; 数组初始值: 数字类型: 0 ...

  3. 使用Maven命令安装jar包到repo中

    项目中可能会碰到很多jar包,使用maven update不能更新,或者jar包是拷贝过来,不能编译的情况.此时就需要手动使用命令行安装. 例如Demo项目中提示缺少四个jar包,但是在repo中已经 ...

  4. Java面经 面试经验 互联网公司面试经验 后端面试经验

    应聘相关 声明: 1,程序员相关的哈 2,万事无定论,比如说,就算你小学毕业,但是java基础却扎实到变态,我相信open的公司还是会给你机会的. 3,心态很重要,虽然日常的心态不容易控制,面试那俩小 ...

  5. MAC下pyenv和pyenv-virtualenv插件初探

    为什么会使用pyenv和pyenv-virtualenv插件 一般mac自带一个python版本,称为系统版本.对于开发者而言,肯定不够用啦.所以需要在同一个mac上组建不同的开发环境并且不会冲突. ...

  6. luogu1001 A+B Problem

    A+B Problem 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|<=10^9). 注意 1.pascal使用integer会爆掉哦! 2.有负数哦! 3.c/c++的main函 ...

  7. 【剑指offer】二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.   注意点:要注意特殊 ...

  8. 使用百度云同步盘和Git Extensions进行代码托管

    一.软件安装 百度云同步盘和Git Extensions的安装和配置略过. 二.建立Git代码库,以[GHO2VMDK转换工具]项目为例 1. 建立本地代码库 进入[GHO2VMDK转换工具]项目文件 ...

  9. 怎样查看当前QQ的版本号是多少

    怎样查看当前QQ的版本号是多少.. -------------- -------------

  10. web前端笔记整理---CSS

    一   Css  文件 Css: 美化HTML的 4种选择器: 元素选择 类选择 ID选择 伪类选择 常用的布局方案 1 写在什么位置能好用. 1.1 元素里面 优先级是最高的 1.2 元素外,文件内 ...