201621123010《Java程序设计》第10周学习总结


1. 本周学习总结

1.1 以你喜欢的方式(思惟导图或其余)概括总结异常相关内容。


2. 书面做业

本次PTA做业题集异常java

1. 经常使用异常

结合题集题目7-1回答程序员

1.1 本身之前编写的代码中常常出现什么异常、须要捕获吗(为何)?应如何避免?

:7-1这题中主要作的就是捕获运行时产生的异常以及用户主动抛出的异常;
之前编写的代码容易出现如下问题:数组

  1. ArrayIndexOutOfBoundsException
  2. NullPointerException
  3. ClassCastException
  4. NumberFormatException
    其中以上这些异常均不必定须要捕获,由于这些异常都是非直接继承自Exception类,像RunTimeException这种直接继承自Exception类的才必须捕获。
    避免出现这些异常的重要过程就是在编写代码时对各个条件都作好严格的审查,尤为是边界值,对可能输入的参数类型要编写代码筛选,将不符合要求的传入数据丢弃并作出提示告知使用者传入的参数类型及格式。

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

:对于直接继承自Exception类的异常,在编写代码的时候必需要捕获(如RuntimeException),不然编译不容许经过。函数


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

题集题目7-2学习

2.1 实验总结。并回答:怎么样才能让你的程序更加健壮?

:本题主要作的就是使用异常处理输入机制,于是要在将数据传入数组的语句块处使用try-catch语句,对可能传入的不符合要求的数据产生的异常进行捕获。
要使程序更加健壮,就要对程序中可能产生异常的语句加上try-catch语句对异常进行捕获,此外还要注意传入数据的语句块也容易传入不符合要求的数据,于是也常须要使用异常处理输入机制。设计


3. throw与throws

题集题目7-3
阅读Integer.parsetInt源代码code

3.1 Integer.parsetInt一开始就有大量的抛出异常的代码,这种作法有什么好处?


源代码如上图,一开始便抛出大量的异常的代码,先将对为Null的对象抛出异常,再对进制不在最小进制二进制及最大进制三十六进制的数据对象抛出异常,这样作的好处是能够先把彻底不符合要求的对象进行剔除,以后再对剩下的数据作进一步的筛选判断。orm

3.2 结合本身编写的程序与3.1,分析本身编写的方法抛出异常时通常须要传递给调用者一些什么信息?

:抛出异常时应让使用者明确知道产生的是什么异常,以及产生异常的具体缘由及位置,而不是仅仅告诉使用者有异常,但不给出具体的问题所在。
因此在编写方法时,在抛出异常的模块处须要指明产生的是什么样的异常以及产生异常的具体缘由位置视频


4. 用异常改进ArrayIntegerStack

题集题目6-3对象

4.1 结合6-3代码,回答使用抛出异常的方式表明程序运行时出错有什么好处?比单纯的返回错误值,有何优势?

:经过使用异常处理机制抛出异常,可让使用者更加明确地知道操做失败的具体类型、缘由及位置等信息;
而单纯的返回null或错误值,就等因而告诉使用者”你执行的操做失败了,但我不告诉你具体的失败缘由”,这样就显得程序比较弱小。

4.2 若是一个方法内部的内码抛出的是RuntimeException类型的异常,那么方法声明是否应该使用throws关键字,若是使用throws关键字声明该方法抛出的异常,能给咱们带来什么好处吗?

:若是内码抛出的是RuntimeException类型的异常,则方法声明可不使用throws关键字。由于直接继承Exception类的异常才必需要被捕获。
若是是RuntimeException,则抛出异常后虚拟机会进行处理,不须要程序员编写try-catch语句,而非RuntimeException,则须要在编写时自行捕获并处理。


5. 函数题-多种异常的捕获

题集题目6-1

5.1 结合6-1代码,回答:一个try块中若是可能抛出多种异常,且异常之间可能有继承关系,捕获时须要注意些什么?

:当一个try块中若是可能抛出多种异常,且异常之间可能有继承关系时,若父类的捕获语句在子类前,则因为代码执行是按序执行的,此时优先执行父类的捕获语句,而子类的异常继承自父类,因此当父类的捕获后,该异常已经没法再继续被子类捕获,此时便失去了子类捕获语句的做用。
于是在捕获时,须要注意要将子类的异常捕获语句放置在父类的异常捕获语句前。

5.2 一个try块中若是可能抛出多种异常,使用Java8的多重异常捕获语法须要注意些什么?

:一个try块中若是可能抛出多种异常,则使用Java8的多重异常捕获语法须要注意在try块后分别为每一种异常添加一个catch语句块,且若各异常之间有继承关系,则子类的异常捕获须要放在父类的异常捕获前。


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));//打印数组内容

6.1 改正代码,并增长以下功能。当找不到文件时,需提示用户找不到文件xxx,请从新输入文件名,而后尝试从新打开。 若是是其余异常则提示打开或读取文件失败!

注1:里面有多个方法都可能抛出异常。
功能2:须要添加finally关闭文件。不管上面的代码是否产生异常,总要提示关闭文件ing。若是关闭文件失败,提示关闭文件失败!
文件不存在时

文件存在时

6.2 结合题集6-2代码,要将什么样操做放在finally块?为何?使用finally关闭资源须要注意一些什么?

:在try-catch语句块后,如有不管如何都须要执行的语句,则须要放进finally语句中,如上一步的关闭文件是不管如何都须要执行的,此外还有其余类型的资源释放一般也须要放进finally语句块中。
使用finally关闭资源的时候,由于关闭资源的语句也有可能会产生异常,所以也须要使用try-catch语句。

6.3 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源。简述这种方法有何好处?

文件不存在时

文件存在时

在try后面加个括号,再初始化对象的语法就叫try-with-resources,使用这种语法,则自动调用了资源的close()函数,因此程序员无需在编写时再编写资源的关闭释放语句。


7. 面向对象设计做业-图书馆管理系统(分组完成,每组不超过3个同窗)

登陆lib.jmu.edu.cn,对图书进行搜索。而后登陆图书馆信息系统,查看个人图书馆。若是让你实现一个图书借阅系统,尝试使用面向对象建模。

7.1 该系统的使用者有谁?

:主要应该是两类,一是普通使用者,二是图书馆系统的管理员

7.2 主要功能模块(不要太多)及每一个模块的负责人。下周每一个人要提交本身负责的模块代码及运行视频。

  • 注册及登录模块,须要由登陆模块的帐号名区分用户类型。
  • 针对普通使用者大体上是查找书籍借阅书籍
  • 针对管理员,功能为上/下架书籍

7.3 该系统的主要的类设计及类图(可用)

:针对使用对象,可设计一个User类,属性为普通使用者与管理员共有的属性(帐号密码等),而普通使用者类与管理员类可继承User类,而后扩展其余属性,此外还须要一个图书类用于记录图书对象的信息。

  • 普通使用者类内部应包含查找借阅方法;
  • 管理员类应包含上架/下架书籍方法;
  • 图书类内部应包含图书的信息记录方法;
  • 此外还有登录/注册方法

7.4 你准备如何存储图书信息、解决信息、读者信息等。

:如果较为简单的信息,则可使用动态数组来存储信息较为简单;
如果信息较多较复杂,则须要使用文件来存储各模块的信息,固然文件的操做也会相对复杂。
会尝试着使用文件来解决,如果实现有困难则会考虑选择动态数组来处理。


3.码云及PTA

题目集:异常

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成状况图

须要有两张图(1. 排名图。2.PTA提交列表图)


3.3 统计本周完成的代码量

须要将每周的代码统计状况融合到一张表中。

周次 总代码量 新增代码量 总文件数 新增文件数
1 90 90 5 5
2 322 232 11 6
3 652 330 16 5
4 946 294 21 5
5 1347 401 26 5
6 1591 244 28 2
7 2118 527 31 3
8 2627 509 39 8
9 2912 285 42 3
10 3171 259 50 8
相关文章
相关标签/搜索