第9周作业-异常


1.本周学习总结

2.书面作业

本次PTA作业题集异常

1.常用异常

题目5-1

1.1 截图你的提交结果(出现学号)


1.2 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?

  像自己以前经常出现的异常有ArrayIndexOutOfBoundsException(数组越界)、 NullPointerException(空指针)、ClassCastException(强制类型转换错误)等等,虽然这些都是异常,但是我们却不需要去捕获,因为它们都继承自RuntimeException异常类,继承该类的异常都无需去捕获。想要避免它们。我们就需要用到try-catch。虽然RuntimeException的异常可以不使用try-catch进行处理,但是如果一旦发生异常,肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,我们最好使用try-catch的异常处理机制进行处理。

1.3 什么样的异常要求用户一定要使用捕获处理?

  只要是非RuntimeException异常类或者其子类的的异常都要声明捕捉。

2.处理异常使你的程序更加健壮

题目5-2

2.1 截图你的提交结果(出现学号)


2.2 实验总结

  这道题总体上来说不难,但是其中有两个地方需要特别注意。  第一处是读取数据,我采取的是整行读入,这时候读入的并不仅仅是数据还有一个回车,如果不将这个回车处理掉,就会出现如下的输出:



  箭头所指的这行是我们所不需要的。

  第二处是在捕获到异常之后的重新输入,一定要记得将非整型字符串从数组中去掉,否则它将占用数组的一个位置,导致最后一个整型字符串无法进入数组。

3.throw与throws

题目5-3

3.1 截图你的提交结果(出现学号)**

3.2 阅读Integer.parsetInt源代码,结合3.1说说抛出异常时需要传递给调用者一些什么信息?

  需要让调用者知道编译器对这段代码抛出什么异常,抛出异常的原因。Integer.parsetInt源代码中,当传入的字符串为nullradix < Character.MIN_RADIX等时,就会抛出NumberFormatException异常,并提示抛出这个异常的原因。题目5-3中,当begin>end或者begin小于0,end大于arr.length时,就抛出IllegalArgumentException异常,并说明begin>end时抛出IllegalArgumentException异常是因为begin>endend大于arr.length时抛出IllegalArgumentException异常是因为超出范围。

4.函数题

题目4-1(多种异常的捕获)

4.1 截图你的提交结果(出现学号)


4.2 一个try块中如果可能抛出多种异常,捕获时需要注意些什么?

  一个try块中如果可能抛出多种异常,捕获时需要注意这多种异常之间的继承关系,子类必须在父类之前先被捕捉,否则会发生错误。例如本题出现的三个异常:NumberFormatException、IllegalArgumentException、ExceptionNumberFormatException继承自IllegalArgumentExceptionIllegalArgumentException继承自Exception,所以在编写catch块时要以NumberFormatException、IllegalArgumentException、Exception的顺序进行,这样才能保证程序不出错;或者是只需要一个Exception也可以。

  

5.为如下代码加上异常处理

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 改正代码,让其可正常运行。注意:里面有多个方法均可能抛出异常

		byte[] content = null;
try{
FileInputStream fis = new FileInputStream("testfis.txt");
}catch (IOException e) {
// TODO: handle exception
System.out.println(e);
}
try{
int bytesAvailabe = fis.available();//获得该文件可用的字节数
}catch (IOException e) {
// TODO: handle exception
System.out.println(e);
}
try {
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}finally {
if(fis != null)
fis.close();
}
System.out.println(Arrays.toString(content));

5.2 如何使用Java7中的try-with-resources来改写上述代码实现自动关闭资源?

		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));//打印数组内容
}

6.重点考核:使用异常改进你的购物车系统(未提交,得分不超过6分)

举至少两个例子说明你是如何使用异常机制让你的程序变得更健壮。

说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

  在购买商品的过程中可能会出现输入的数字不是我们商品列表中的商品编号的情况或者输入的需要购买的商品个数为负数的情况下,我就让它抛出IllegalArgumentException异常,并且直接退出重新进入,,但是这样设定起来购买的过程就会变得比较繁琐,重复的操作会变多,总体改下来感觉不太好,目前还在考虑其它的方法。

  

    input.print("输入商品编号查看商品");
int i = input.nextInt();
try{
switch (i) {
case 0:
break;
default:
Goods goods = allGoods.getGoodsList().get(i - 1).display();
}catch(IllegalArgumentException e){
System.out.println(e);
break;
}
input.print("输入1加入购物车");
try{
switch (input.nextInt()) {
case 1:
input.print("请输入购买商品的个数:");
ShoppingCart().add(ShoppingCart().new ShoppingList(goods, input.nextInt()));
break;
}catch(IllegalArgumentException e){
System.out.println(e);
break;
}
break;
}

8.选做:课外练习

JavaTutorial中Questions and Exercises

练习总结


1.Is the following code legal?

try {

} finally {

}

  在异常处理机制try-catch-finally中,捕获异常try是必须要有的,但是如果我们捕获到了异常却不做处理的话,那么catch块就可以被省略,finally块中则可能是进行资源的清理工作,如关闭文件等操作。

2.What exception types can be caught by the following handler?

catch (Exception e) {

}

What is wrong with using this type of exception handler?

  这样能够catch到所有的异常,因为Exception是所有异常的父类。这样固然能够捕获到异常但是,我们却失去了被抛出的异常类型这一信息,这样使我们无从通过代码知道具体的异常,可能会降低我们的效率。

  

3.Is there anything wrong with the following exception handler as written? Will this code compile?

try {

} catch (Exception e) {

} catch (ArithmeticException a) {

}

  这段程序不能通过编译,原因是,第一个catch块已经捕获所有的异常,包括算术异常,所以第二个catch块根本无法到达,还会导致编译出错。如果要通过编译,只需将两个catch块的顺序交换。

4.Match each situation in the first list with an item in the second list.

a.int[] A;

 A[0] = 0;

b.The JVM starts running your program, but the JVM can't find the Java platform classes. (The Java platform classes reside in classes.zip or rt.jar.)

c.A program is reading a stream and reaches the end of stream marker.

d.Before closing the stream and after reaching the end of stream marker, a program tries to read the stream again.


1.(b)error

2.(d)checked exception

3.(a)compile error

4.(c)no exception

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-05-集合

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图


201521123107 《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. 让你能看懂的 JavaScript 闭包

    让你能看懂的 JavaScript 闭包 没有废话,直入主题,先看一段代码: var counter = (function() { var x = 1; return function() { re ...

  2. Jenkins: 配置信息变更历史

    像 Jenkins 这样的系统,使用的过程就是配置文件变更的过程.如果能够对配置文件的变更进行跟踪管理,将极大的提高系统的可用性.Job Configuration History 插件就是这么一款实 ...

  3. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...

  4. Java 加载、链接、初始化

    JVM 动态地加载.连接.初始化类或接口(在本文之后的篇幅中,我将使用"类"来表示"类和接口").这里我先贴上 Java 虚拟机规范的原文: Loading i ...

  5. Jquery ztree树插件2

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. shiro

    1 权限管理 1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己 ...

  7. Linux下C程序的存储空间布局

    一个程序本质上都是由 BSS 段.data段.text段三个组成的.可以看到一个可执行程序在存储(没有调入内存)时分为代码段.数据区和未初始化数据区三部分. BSS段(未初始化数据区):在采用段式内存 ...

  8. Centos7安装mysql-5.7.19

    Centos7安装Mysql 一 mysql下载 地址: https://dev.mysql.com/downloads/mysql/#downloads 二 在centos7上创建安装文件存放.解压 ...

  9. Action和Fuc的区别

    Action和Fuc的区别,参数和具体用法

  10. c语言 创建链表

    #include "malloc.h" #include "stdio.h" #define LEN sizeof(struct student) typede ...