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. Relationship between frequency domain and spatial domain in digital images

    今天又复习了一遍<<Digital Image Processing>>的第四章,为了加深对频域的理解,我自己用PS画了一张图.如下: 然后做FFT,得到频谱图如下: 从左到右 ...

  2. ios逆向过程中lldb调试技巧-po篇

    假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在 ...

  3. Win7系统默认的壁纸路径

    Win7系统默认的壁纸路径.. ------------------- ------------------- ------------------- ------------------- ---- ...

  4. 用PE安装操作系统时:无法创建新的系统分区 也无法定位现有系统分区 的解决办法

    借助U盘的用PE安装操作系统时系统提示:无法创建新的系统分区 也无法定位现有系统分区 的解决办法... --------------------------------- 具体原因是安装时加载到安装程 ...

  5. SpringMVC详解(六)------与json交互

    Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛.那么这篇博客我们主要谈谈在 SpringMVC 中,如何对 json ...

  6. 【概率论与数理统计】小结3 - 一维离散型随机变量及其Python实现

    注:上一小节对随机变量做了一个概述,这一节主要记录一维离散型随机变量以及关于它们的一些性质.对于概率论与数理统计方面的计算及可视化,主要的Python包有scipy, numpy和matplotlib ...

  7. 采用OCR识别自动识别财务报表

    一.         财务报表有什么作用 财务报表又叫会计报表,包含:资产负债表.损益表.现金流量表三表.财务报表对企业经营状况有重要的参考意义: n  全面系统地揭示企业一定时期的财务状况.经营成果 ...

  8. 新手站长如何快速学习实践SEO?

     1. 任何老鸟都是从新人开始通过慢慢不断积累,经过各式各样的失败以及彷徨之后,才让自己拥有越来越多的经验,此时信心才会逐渐出现.如果没有勇气踏出第一步去尝试的话,那么永远不可能走在网络营销这条大路上 ...

  9. 以太坊系列之十六: 使用golang与智能合约进行交互

    以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的目录结构 token contract 智能合约的golang wrapper ...

  10. Html5笔记之第四天

    属性 值 描述 accesskey character 规定访问元素的键盘快捷键 class classname 规定元素的类名(用于规定样式表中的类). contenteditable true f ...