201621123040《Java程序设计》第十周学习总结
1.本周学习总结
2.书面作业
2.1常用异常
2.1.1自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?
- 算术异常
ArithmeticException
(除数为0的情况) - 类型强制转换异常
ClassCastException
(类型强制转换过程中,不能进行转换的情况) - 数组越界异常
ArrayIndexOutBoundsException
(访问数组中的一个非法元素) - 上述常发生的异常都是RuntimeException的子类,不一定要捕获;
- 解决方法:遇到除数为0的情况单独分析;考虑清楚类型转换过程是否恰当,不恰当时则可选择不用此方法的类型转换;访问数组元素时,使用for循环,在
数组.length()
范围内访问,否则跳出循环
2.1.2什么样的异常要求用户一定要使用捕获处理?
- RuntimeException异常是Exception异常的子类;继承RuntimeException异常的不一定要捕获;凡是直接继承自Exception的异常都需要捕获处理
2.2处理异常使你的程序更加健壮
2.2.1实验总结。并回答:怎么样才能让你的程序更加健壮?
- 本题按照题意思路进行即可,在try-catch模块中,在遇到字符型转换成Integer型失败时,重新输入使用
i--
;最后打印Arrays.toString()
即可
- 在方法中尽量要有try-catch模块,避免运行时报错
- 使用try-catch模块时,尽量多用finally语句,进行资源的释放
- 在进行多异常捕获的时候,最后建议加上Exception异常做没有考虑到的异常捕获
- 对于for循环for(int i=o;i<list.size();i++)显然不如for(int i=o;list!=null&&i<list.size();i++)健壮
2.3throw与throws
2.3.1Integer.parsetInt
一开始就有大量的抛出异常的代码,这种做法有什么好处?
- 让编译者知道自己在转制过程所遇到的异常问题,进而尽量规避异常
if (s == null) s为空
if (radix < Character.MIN_RADIX)
if (radix > Character.MAX_RADIX)超限
2.3.2结合自己编写的程序与3.1,分析自己编写的方法抛出异常时一般需要传递给调用者一些什么信息?
begin<end
抛出IllegalArgumentException
异常
begin<0
抛出IllegalArgumentException
异常
end>arr.length
抛出IllegalArgumentException
异常
2.4用异常改进ArrayIntegerStack
2.4.1结合6-3代码,回答使用抛出异常的方式代表程序运行时出错有什么好处?比单纯的返回错误值,有何优点?
- 抛出异常,可视为一个断点,便于修改此部分的错误代码,更有针对性;单纯的返回错误值,就相对来说不那么快速且直接的找到错误点,耗时
2.4.2什么时候该使用throw
关键字?
- throw 关键字通常在方法体中,并抛出一个某类的异常对象;且throw语句抛出的只能是类Throwable或其子类的实例对象;程序在执行到throw语句时不会再执行后面的语句;如果抛出的是RuntimeException或Error,则可以选择性地处理该异常
2.4.3如果一个方法内部的内码抛出的是RuntimeException类型的异常,那么方法声明是否应该使用throws关键字,如果使用throws关键字声明该方法抛出的异常,能给我们带来什么好处吗?
- 抛出的是
RuntimeException
类型的异常时,没有强制使用throws关键字;如果使用throws关键字声明该方法抛出的异常,可中断运行,找出错误点所在部分
2.5函数题-多种异常的捕获
2.5.1结合6-1代码,回答:一个try块中如果可能抛出多种异常,且异常之间可能有继承关系,捕获时需要注意些什么?
- 因为异常之间可能有继承关系,捕获的时候就需要先捕获子类异常,再捕获父类异常;
本题应该先捕获NumberFormatException
,再捕获IllegalArgumentException
,最后再捕获Exception
(NumberFormatException
是IllegalArgumentException
的子类;IllegalArgumentException
是Exception
的子类)
2.5.2一个try块中如果可能抛出多种异常,使用Java8的多重异常捕获语法需要注意些什么?
- 对于每一个异常应分别写相应的catch块,且子类异常应写在父类异常之前;
如果相应异常的操作相同,可使用父类Exception代表所有异常
2.6为如下代码加上异常处理
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));//打印数组内容
2.6.1改正代码,让其可正常运行。注1:里面有多个方法均可能抛出异常。注2:要使用finally关闭资源。
2.6.2结束处理异常和使用finally关闭资源需要注意一些什么?
try-catch-finally
语句中,finally
语句中的内容一定是需要执行的;但是finally
中也可能出现异常,所以必要时在finally中嵌套使用try-catch
2.6.3使用Java7中的try-with-resources来改写上述代码实现自动关闭资源。简述这种方法有何好处?
- try-with-resources保证资源关闭时,自动调用close函数;大大简化异常出现的次数及分布情况
2.7面向对象设计作业(分组完成,每组不超过3个同学)
登录lib.jmu.edu.cn,对图书进行搜索。然后登录图书馆信息系统,查看我的图书馆。如果让你实现一个图书借阅系统,尝试使用面向对象建模。
2.7.1该系统的使用者有谁?
- 学生、教师职工、后台管理人员
2.7.2主要功能模块(不要太多)及每个模块的负责人。下周每个人要提交自己负责的模块代码及运行视频。
-
学生、教师职工:
-
账户登录
图书查询
图书借阅
图书归还
查阅账户信息
退出系统 -
后台管理人员:
-
账户信息管理
图书查询 -
初期目标是先实现学生、教师职工的功能
-
组员:林俊伟(负责账户登录和图书查询)
王彩云(负责图书借阅和图书归还)
罗佳(负责查阅账户信息和退出系统)
2.7.3该系统的主要的类设计及类图(可用)
2.7.4你准备如何存储图书信息、解决信息、读者信息等
- 想过使用动态数组存储相关信息,但是一旦信息量繁杂巨大时,就不便操控;可以使用文件(读入读出)相关信息
3.码云及PTA
3.1码云代码提交记录
3.2截图PTA题集完成情况图
3.3统计本周完成的代码量
|周次||总代码量||新增代码量||总文件数||新增文件数|
:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐
|第一周||189||189||10||10|
|第二周||304||304||9||9|
|第三周||557||557||10||10|
|第四周||621||621||8||8|
|第五周||326||326||7||7|
|第六周||972||972||12||12|
|第七周||338||338||4||4|
|第八周||379||379||6||6|
|第九周||492||492||5||5|
|第十周||473||473||6||6|