第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设计模式06(工厂方法模式)

    上一次已经给大家介绍了简单工厂模式,相信大家对创建型设计模式有了初步的了解,本次我将给大家介绍的是工厂方法模式. 工厂方法模式 工厂方法模式(Factory Method):通过对产品类的抽象使其创建 ...

  2. 初学Python之 字符串 索引 分片

    字符串是字符的有序集合,可以通过其位置来获得具体的元素. 在python中,字符串中的字符是通过索引来提取的,索引从0开始. python可以取负值,表示从末尾提取,最后一个为-1,倒数第二个为-2, ...

  3. ASP.NET Core - 关于标签帮助器您值得了解的五点

    如果您开发过ASP.NET Core Web应用程序,您应该已经熟悉了标签帮助器.ASP.NET Core应用程序依赖标签帮助器来呈现表单和表单字段是很常见的.所以,一个视图通常包含许多标签帮助器以及 ...

  4. 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统

    很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...

  5. angular或者js如何确定选中ul中的哪几个li

    刚来新公司接到新的需求做一个知识库页面 红色的是单选    蓝色的是多选     这些都是需要传递到后台的 开始不知道如何解决  下班后在家想到一个很巧妙的办法  不多说上代码 箭头所指就是在li里写 ...

  6. web前端+javascript+h5电子书籍和实战分享

    有很多前端伙伴们学习前端很多了,但是如何能成为优秀的程序员呢,前端必学的知识点相信学习前端的伙伴们心里都非常清楚.主要的三要素包括HTML.CSS和JavaScript.那么学好JavaScript是 ...

  7. C++ 开发OCX 的方法和注意事项

    C++ 开发OCX 的方法和注意事项 前言 ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件.ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精 ...

  8. C# 开机自启动和最小化托盘显示

    C# 开机自启动和最小化托盘显示 一.      C# 开机自启动 C# 开机自启动,这个功能是大多数服务型软件很常用一个功能,但是这个功能确是不 太好做,花了两天想对策.不过最终呢,结果还是很满意的 ...

  9. Oracle Basic Ready Notes

    1. Select the standard database block size. This is specified at database creation by the DB_BLOCK_S ...

  10. EF vs ADO.NET

    EF有什么缺点,什么时候需要考虑用ADO.NET http://blog.sina.com.cn/s/blog_4aedf6370102wgxl.html