第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. 关于Web.config的debug和release.config文件

    使用Web.Config Transformation配置灵活的配置文件 发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常 ...

  2. .net core 2.0学习笔记(二):Hello World & 进阶

    官网已经有一个.net core的入手教程(https://www.microsoft.com/net/core#windowscmd),但这个教程完全没有顾及全宇宙第一IDE的感受.今天就跟大家体验 ...

  3. Navicat提示Access violation at address 004E9844 in module ‘comctl32.dll’

    内存越界问题,重新注册下Windows的动态链接库,首先“开始”—“cmd”,在打开的dos窗口中运行“for %1 in (%windir%\system32\*.dll) do regsvr32. ...

  4. HTML5——css基础语法

    1.了解CSS CSS是一种用来表现HTML等文件样式的计算机语言,是对HTMl文件中设置的各种标签添加各种各样的样式与表达方式,让网页更生动,更美观. 2.导入CSS的三种方式 1.行内样式表:直接 ...

  5. iostat磁盘IO命令详解

    Linux IO 实时监控iostat命令详解 简介: 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中 ...

  6. CSS常见英语单词属性一览

    这些是css中常会用到的一些英文单词,大家可以多看看,多使用就会容易记得了. color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体 ...

  7. windows和linux下关闭Tomcat进程

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  8. 实现quartz定时器及quartz定时器原理介绍(转)

    一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...

  9. 【Tomcat】Invalid character found in the request target

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC ...

  10. IT类非开发面试总结--1

    面试总结.. ================================= 第一部分.. -------------2. 电脑开机时风扇转, 但是屏幕没有任何显示, 此现象可能是哪些方面所导致? ...