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. lodash框架中的chunk与drop函数源码逐行分析

    lodash是一个工具库,跟underscore差不多 chunk函数的作用: 把一维数组,按照固定的长度分段成二维数组 如: chunk( [ 10, 20, 30, 40 ], 2 )     结 ...

  2. GBK和UTF-8互相转码

    <1>.GBK ---> UTF-8 void ConvertGBKToUtf8(CString& strGBK) { , (LPCTSTR)strGBK, -, NULL, ...

  3. Ignite Web 控制台(使用官方免费部署的控制台)

    前提: 假设已安装ignite,并且安装路径为:/usr/apache-ignite-fabric-2.1.0-bin 1.下载Web Agent 打开链接:https://console.gridg ...

  4. .NET Core 2.0迁移技巧之MemoryCache问题修复

    对于传统的.NET Framework项目而言,System.Runtime.Caching命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存. .NET Core 2.0暂时 ...

  5. MySQL show 语句

    总览show 语句 show tables from database_name; -- 显示当前数据库中所有表的名称.  show databases; -- 显示mysql中所有数据库的名称.  ...

  6. 【Zookeeper】3.4.9 基本配置

    [hadoop@master1 ~]$ cat zookeeper/conf/zoo.cfg # The number of milliseconds of each tick 每个心跳的时长 单位为 ...

  7. 【Ubuntu 16】启动Eclipse Indigo报错 error code1 jdk没有配置好

    在/etc/profile下配置好JAVA_HOME CLASSPATH PATH 这些变量后 eclipse启动jvm并不能直接按照这些变量来启动 需要使用命令 update-alternative ...

  8. 基于hdp2.5升级phoenix版本为4.8

    hdp2.5自带的phoenix是4.7的,而客户的驾驶舱项目跑在4.7的phoenix上是有问题的,如:如果表中没有数据,执行select count(*) from 表,返回的是空,这时导致驾驶舱 ...

  9. iOS,点击button拨打电话

    //按钮点击拨打电话 -(void)kfclick:(UIButton *)btn { [[UIApplication sharedApplication] openURL:[NSURL URLWit ...

  10. postman 第5节 Runner的使用(转)

    1.首先在postman新建要批量运行的接口文件夹,新建一个接口,并设置好全局变量. 2.然后在Test里面设置好要断言的方法 如: tests["Status code is 200&qu ...