1. 本章学习总结

2. 书面作业

本次PTA作业题集异常

1.常用异常题目5-1

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

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

    ①除0异常、数组越界、文件找不到...

    ②之前学习的C语言,没有异常这一说,只是程序出错后在出错的地方进行改进;在Java中,继承RuntimeException异常的不一定要捕获,但是继承Exception的异常都需要捕获。

    ③有些异常,像RuntimeException在程序中是完全可以避免的,比如数组的越界,只要在程序做个判断,如果访问的数组元素下标和数组的长度作一下比较就知道会不会越界了,再比如空指针异常,如果访问对象是判断一下对象是否为空就可以了。

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

    之前提到的凡是直接继承自Exception的异常都需要捕获处理。

2.处理异常使你的程序更加健壮题目5-2

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

  • 2.2 实验总结

    本题主要是对输入的数x[i] = Integer.parseInt(inputInt);判断是否需要使用异常机制处理异常输入,剔除出现异常的数,再进行Arrays.toString输出,其他就没什么好说的。

3.throw与throws题目5-3

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

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

public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
} public static int parseUnsignedInt(String s, int radix)
throws NumberFormatException {
if (s == null) {
throw new NumberFormatException("null");
} int len = s.length();
if (len > 0) {
char firstChar = s.charAt(0);
if (firstChar == '-') {
throw new
NumberFormatException(String.format("Illegal leading minus sign " +
"on unsigned string %s.", s));
}
}

结合源代码,以及题目5-3我们发现,抛出异常时,需要传递给用户具体哪方面出现了问题;

比如:要求begin < end,否则抛出相应的异常(IllegalArgumentException`)。出现异常时,抛出throw new IllegalArgumentException("begin:"+begin+" >= "+"end:"+end);提示用户begin要大于等于end。

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

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

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

    一段代码可能会抛出多个异常,需要写多个catch子句来捕获;比如:函数题4-1中一个try,抛出多种异常,有用到多个catch。(代码如下)

try {
if (choice.equals("number"))
throw new NumberFormatException();
else if (choice.equals("illegal")) {
throw new IllegalArgumentException();
} else if (choice.equals("except")) {
throw new Exception();
} else
break;
} catch(NumberFormatException e) {
} catch(IllegalArgumentException e) {
} catch(Exception e) {
}
}

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 改正代码,让其可正常运行。注1:里面有多个方法均可能抛出异常。注2:要使用finally关闭资源。

修改后的代码:

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(IOException e) {
System.out.println(e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
}

按照eclipse提示,我们知道了构造FileInputStream方法需要抛出FileNotFoundException异常,所以添加了throws,FileInputStream的available()方法会抛出IOException异常,查阅jdk文档



发现:FileNotFoundException是IOException的子类;



再看,FileInputStream的read()方法也会抛出IOException异常。

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

    用try-with-resources实现自动关闭资源,只需将需要关闭的内容放入try中。

    格式:
try(  ) {
}catch(){
}

所以上述自动关闭资源的代码如下:

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(IOException e) {
System.out.println(e);
}
System.out.println(Arrays.toString(content));//打印数组内容

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

举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

1、商品选购好后,用文件存放商品信息,那么在购物车结算的时候需要读取文件的信息,进行结算,这里就会碰到异常(文件不存在、获取的文件内容有问题、关闭资源的问题......)

2、解决方案(参照题目5关于文件异常的解决):

//关键代码处理上述异常
FileInputStream shop= null;
try(FileInputStream shop = new FileInputStream("shoppingcart.txt");) {
int bytesAvailabe = shop.available();
if (bytesAvailabe > 0) {
content = new byte[bytesAvailabe];
shop.read(content);
}
}catch(FileNotFoundException e){
System.out.println(e);
}
catch(IOException e){
System.out.println(e);
}

3. 码云上代码提交记录

题目集:异常

3.1. 码云代码提交记录

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

201521123044 《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. Canvas 旋转风车绘制

    写在前面:   亲爱的朋友们大家好,鄙人自学前端,第一次写博客,写的不好的地方,烦请同学们谅解,如果本文对你有一丁点帮助,还请劳驾您给我点个赞,您的认可将是我坚持下去的强大动力!谢谢! 在进行教学之前 ...

  2. controlfile与备份恢复

    controlfile与备份恢复     数据库正常关闭,trace controlfile信息.   ************************************************ ...

  3. 备注: ubt 16.04 安装 gtx 1060 --- 成功运行 tensorflow - gpu

    ---------------------------------------------------------------------------------------------------- ...

  4. 关于VS AddIn的注册

    使用VS2010创建addin工程时,如果选择的开发语言是unmanaged c++,以addin为后缀的XML描述文件就不起作用了.这种情况下addin通过注册表来实现注册功能.实际可在如下位置找到 ...

  5. 理解最基本的Vue项目

    上一篇<Vue开发环境搭建及热更新>,我们讲解了vue开发环境的搭建还有一些小问题,接下来我们来讲解一下这个界面是如何形成的. 在开始讲之前,我们先来看看我们上一篇所谓的项目目录里面到底放 ...

  6. Oracle - 简单理解字符集

    起因 今天使用SoapUI来模拟第三方的程序进行测试. 简单来说,流程是我们的程序从SoapUI里面获取数据,然后将数据插入数据库从数据库. SoapUI的脚本来自于第三方,里面包含当地的字符编码,当 ...

  7. FxZ,C#开发职位面试测试题(30分钟内必须完成)

    1. Refactor the following code (C#) to use polymorphism instead of if-else. Please provide your answ ...

  8. [js高手之路]使用原型对象(prototype)需要注意的地方

    我们先来一个简单的构造函数+原型对象的小程序 function CreateObj( uName, uAge ) { this.userName = uName; this.userAge = uAg ...

  9. SUID SGID

    SUID 1.只作用在可执行二进制文件上,普通用户需要对该文件有x权限, 2.在执行该文件时,用户身份切换为文件owner: 3.执行完毕,切换回普通用户. 一.查找具有SUID权限的系统文件(-40 ...

  10. 解析java中volatile关键字

    在Java多线程编程中经常volatile,有时候这个关键字和synchronized 或者lock经常有人混淆,具体解析如下:  在多线程的环境中会存在成员变量可见性问题: java的每个线程都存在 ...