第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. 编写一个简单的TCP服务端和客户端

    下面的实验环境是linux系统. 效果如下: 1.启动服务端程序,监听在6666端口上  2.启动客户端,与服务端建立TCP连接  3.建立完TCP连接,在客户端上向服务端发送消息 4.断开连接 实现 ...

  2. Lucene搜索引擎+HDFS+MR完成垂直搜索

    介于上一篇的java实现网络爬虫基础之上,这一篇的思想是将网络收集的数据保存到HDFS和数据库(Mysql)中:然后用MR对HDFS的数据进行索引处理,处理成倒排索引:搜索时先用HDFS建立好的索引来 ...

  3. Java继承关系的父子类中相同的成员变量

    最近又重温了一遍<java编程思想>,在看的过程中产生一个想法,java中继承关系的父子类,相同的方法会被重写,那相同的变量会怎样呢? 答案是变量没有重写之说,如果子类声明了跟父类一样的变 ...

  4. OpenStack(企业私有云)万里长征第六步——OpenStack网络及虚拟机存储位置

    一.前言 昨天又装了一遍OpenStack.码农这项工作就如同人生,永远有你想不到的意外在等着你,时而是惊喜时而是悲伤.在装的过程中倒是很顺利,只是在安装完成之后碰到了两个之前没有碰到的问题,这里记录 ...

  5. SpringMVC详解(四)------SSM三大框架整合之登录功能实现

    为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...

  6. JSP 页面传值方法总结(转)

    原文地址:http://www.cnblogs.com/java-class/p/6358964.html 阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 ...

  7. 2017多校第10场 HDU 6180 Schedule 贪心,multiset

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6180 题意:给了一些任务的开始时间和终止时间,现在让我们安排k台及机器,让这些任务在k太机器上最小,并 ...

  8. 双T型陷波滤波器

    有时,我们需要设计个滤波器滤除特定一个频率的噪音.这时就需要陷波滤波器了. 陷波器是带阻滤波器的一种,带阻滤波器的滤除频率有一定宽度,而陷波就是对某一个频率噪音的滤除. 双T型陷波滤波器应该是最常见的 ...

  9. python+selenium自动化软件测试(第16章):基础实战(3)

    #coding:utf-8 from time import sleep from selenium import webdriver class cloudedge_register(object) ...

  10. 安装Hadoop 2.7.3的过程中遇到的一些问题及解决方法。

    1. 启动hadoop 时发现namenode 没有启动起来 出现以下错误: Incorrect configuration: namenode address dfs.namenode.servic ...