201521123063 《Java程序设计》 第9周学习总结
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周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- JavaScript实现浏览器本地的图像移动、大小调整和裁剪
本文介绍如何使用和HTML5 Canvas元素来移动.调整大小和裁剪图像,这些技术适用于图片编辑器.照片分享等应用场景. 一般而言图像的剪裁会放在服务端进行,但是图片传送会消耗较多的流量.借助HTML ...
- Linux 环境变量详解
1. $HOME变量从哪里获得的? HOME 本身是 shell 来设置的,你可以自己手工设置(例如使用 bash 的 export),也可以在 shell 的初始化文件中设置(例如 bash 的 . ...
- Failed resolution of: Landroid/support/v7/internal/widget/TintManager;
碰到这个问题,一般都是build.gradle中导入的包不匹配的问题,如TabLayout与ViewPager搭配使用的时候,必须保持导入包的版本一致 compile 'com.android.sup ...
- Android Studio上修改项目(module)的包名(Package Name)
当你对着包名右击,查找Refactor(重构)下的Rename(快捷键:SHIFT+F6)时,弹出来的仅仅是包名最后一个路径的名称,如下图: 但你往往希望修改整个包名,比如exmple,所以你需要以下 ...
- 立即表达式的多种写法与注意点以及in操作符的作用
立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点, ...
- 初学python类
边看python官方2.7的文档,一边动手测试了一些例子加深自己的印象. 官方文档的网址:http://python.usyiyi.cn/python_278/tutorial/classes.htm ...
- Razor语法问题(foreach里面嵌套if)
报错: @foreach (var item in ViewBag.TopList) { if (!string.IsNullOrWhiteSpace(item.LogoPic_Mobile)) &l ...
- 关于spingMVC使用时配置自动扫描出现的路径报错
com.lab –controller –service –dao –pojo <context:component-scan base-package=" " /> ...
- The C++ Programming Language 学习笔记 第四章 类型和声明
1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return ...
- switch case异常处理机制
public class T3{ public static void main(String[] args) { try{ String kc=""; System.out.pr ...