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. PHP数组的基本操作及遍历数组的经典操作

    <?php 索引数组//数组第一种定义 $arr = array(1,2,3);var_dump($arr); //数组第二种定义$arr = [1,2,3];var_dump($arr); / ...

  2. 微服务架构下的API网关

    顾名思义,是出现在系统边界上的一个面向API的.串行集中式的强管控服务,这里的边界是企业IT系统的边界,主要起到隔离外部访问与内部系统的作用.在微服务概念的流行之前,API网关的实体就已经诞生了,例如 ...

  3. EasyUI Datagrid 鼠标悬停显示单元格内容

    第一种方式: .js 定义函数 <script type="text/javascript"> //格式化单元格提示信息 function formatCellTool ...

  4. ajax提交汉字到后台保存时乱码问题!

    前端(转换): var param = XXXXXXXXXXXXXXXXXX; param = decodeURIComponent(param,true); param = encodeURI(pa ...

  5. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯,前面讲 ...

  6. STL中队列(queue)的使用方法

    STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...

  7. Just for Today

    Just for today I will try to live through this day only and not tackle my whole life problem at once ...

  8. 关于RequestDispatcher的原理

    RequestDispatcher简介 RequestDispatcher 代表请求的派发者.它有2个动作:forward 和 include .客户端对于任何一个请求,可以根据业务逻辑需要,选择不同 ...

  9. Mysql中使用聚合函数对null值的处理

    平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t ...

  10. 创建WIFI热点--附近的百度帐号

    前提准备: 前提是当前的网卡必须支持AP(Acess Point)模式, 也可以使用外接的usb网卡 nodeJS环境 安装create_AP 使用create_AP创建热点, 安装方式为: git ...