1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容。

2. 书面作业

本次PTA作业题集异常

常用异常

题目5-1

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

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

答:涉及到数组的时候,容易产生数组越界;在进行强制转型时候会发生ClassCastException,还有空指针:NullPointerException 当输入的类型与预期的不符合时,会出现NumberFormatException,
这些异常不需要补获,一般在运行出现问题的时候,程序断掉了,才会去检查错误;为了减少程序崩溃,可以使用try...catch来补货异常,根据提醒进行修改

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

答:当类型为Checked Exception时需要捕获异常,而且除了Error与RuntimeException及其子类以外的异常都是Checked Exception

处理异常使你的程序更加健壮

题目5-2

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

2.2 实验总结

总结:在try中包含
int x=Integer.parseInt(scan.next());当输入的含有非数字的字符串,则抛出异常,用catch捕获之后,直接输出异常的信息,如果循环的话,变量需要自减1
在API文档中查看的结果如下:

throw与throws

题目5-3

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

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

源代码:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
抛出异常时,需要给调用者提供,异常的原因,异常的行数;

函数题

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

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

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

答:捕获时,需要注意存在的继承关系,比如RuntimeException 是Exception的子类,如果Exception在其子类的前面,则优先被父类捕获
### 为以下代码加上异常处理

5.1 改正代码,让其可正常运行。注1:里面有多个方法均可能抛出异常。注2:要使用finally关闭资源。(已添加异常处理)

byte[] content = null;
try{
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
}catch(FileNotFoundException | SizeDetermineFailed | MemoryAllocateFailed | ReadFailed e){
e.getStackTrace();
}finally{
if (fis != null) {
try { //考虑到关闭资源也有可能出错
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println(Arrays.toString(content));//打印数组内容

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

参考ppt上的代码;
StringBuilder builder =new SteingBuilder ();
try(Scanner scan=new Scanner(new FileInputStream("testfis.txt")){
while(scan.HasNext()){
builder.append(scan.nextLine());
builder.append('\n');
}
}
改写后:
byte[] content = null;
try(FileInputStream fis = new FileInputStream("testfis.txt")){
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
}catch(Exception e){
e.printStackTrace();
} System.out.println(Arrays.toString(content));

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

举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。

说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

  • 在登录时候输入账号和密码,如果出现还未注册过的账号,会出现异常
改进:
try{
if (Shopping.this.map.get(userInput.getText()).equals(s)) {
new Menu().setVisible(true);
Login.this.dispose();
}
} catch(Exception e){
JOptionPane.showMessageDialog(null, "您输入的账户名密码不正确");
}

运行结果:

  • 在输入添加数量的时候,如果出现非数字的,则会出现NumberFormat的异常,使程序崩溃
改进:
try{
for (i = 0; i < 7; i++) { //因为规定的商品最多有7种
if(addinputtext.getText().equals(g[i].getName())){
g[i].number+=Integer.parseInt(addnumbertext.getText());
list.add(g[i]);
JOptionPane.showMessageDialog(null,"已添加");
break;
}
}
if(i==7){
JOptionPane.showMessageDialog(null,"添加的书名不存在!");
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"输入的数量不正确");
}

运行结果:

选做:JavaFX入门

如果未完成作业1、2的先完成1、2。贴图展示。如果已完成作业1、2的请完成作业3。内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。

  • 第一部分

  • 第二部分

  • 第三部分

选做:课外阅读

JavaTutorial中Questions and Exercises

写出读后感


Question1:

是合法的,finally的块都会被执行

Question2:

当程序出现Exception及其子类的异常情况时,则会被捕获,影响程序的效率

Question3:

不能通过编译,因为ArithmeticException继承Exception,而且Exception在前,所以会被优先捕获,不会运行到下面的代码

Question4:

a 未被初始化,会发生编译错误
b 错误
c 需要用异常来捕获,
d checked exception

Excercise1

Excercise2

需要添加异常的捕获,可能会遇到的异常:FileNotFoundException,IOException

总结:在处理程序的过程中,可能会输入我们不想要的值,导致程序的崩溃,当加上了异常的捕获和处理,会使程序更流畅

3. 码云上代码提交记录

题目集:异常

3.1. 码云代码提交记录

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

选做:4. 课外阅读

任选下面一篇文章阅读,列举出几点自己能理解的异常处理最佳实践。

Best Practices for Exception Handling

Exception-Handling Antipatterns Blog

The exceptions debate

201521123063 《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. easyui 菜单按钮&提示框

    <script type="text/javascript"> function updatePwd(){ alert('修改密码'); } </script&g ...

  2. LeetCode Algorithm

    LeetCode Algorithm 原文出处:[LeetCode] 算法参考:[陈皓 coolshell] 1. Two Sum 3. Longest Substring Without Repea ...

  3. Get host name and port(Object-c)

    /************************************************************************** @param pChHostName: [out ...

  4. 《Java从入门到放弃》入门篇:hibernate查询——HQL

    不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...

  5. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  6. Windows10系统下,彻底删除卸载MySQL

    本文介绍,在Windows10系统下,如何彻底删除卸载MySQL... 1>停止MySQL服务开始->所有应用->Windows管理工具->服务,将MySQL服务停止.2> ...

  7. 【整合】input标签JS改变Value事件处理方法

    某人需要在时间控件给文本框赋值时,触发事件函数.实现的效果: 1.文本框支持手工输入,通过用户输入修改值,手工输入结束后触发事件.阻塞在于失去焦点后才触发(输入过程中不触发事件) 2.通过JS方法修改 ...

  8. 记录一次https证书申请失败的案例

    部分站点由于使用了大量的域名,会导致 auto-ssl 配置的内存不够用,导致证书申请失败.需要做以下调整 nginx.conf 中 lua_shared_dict auto_ssl 调整为 128m ...

  9. Vue keep-alive实践总结

    <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...

  10. 切诺夫界证明(Chernoff bound)