201621123053《Java程序设计》第十周学习笔记文章

1. 本周学习总结

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

  • 捕捉异常:
    Java中的异常捕获结构由try{}catch(){}finally{}三个部分组成。其中try{}语句用于存放可能发生异常的语句,catch(){}语句用于激发被捕获的异常,finally{}语句是异常结构最后处理的部分,无论有无异常发生,都会被执行,一般用于关闭资源。
  • Java常见异常
异常类 说明
ClassCastExctption 类型转换异常
ClassNotFoundExctption 未找到相应类异常
ArithmeticExctption 算数异常
ArrayIndexOutOfBoundsExctption 数组下标越界异常
ArrayStoreExctption 数组中包含不兼容的值抛出的异常
SQLExctption 操作数据库异常
NullPointerExctption 空指针异常
NoSuchFieldExctption 字段未找到异常
NoSuchMethodExctption 方法未找到抛出的异常
NumberFormatExctption 字符串转换为数字抛出的异常
NegativeArraySizeExctption 数组元素个数为负数抛出的异常
StringIndexOutOfBoundsExctption 字符串索引超出范围抛出的异常
IOExctption 输入输出异常
IllegalAccessExctption 不允许访问某类异常
InstantiationExctption 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
EOFExctption 文件已结束异常
FileNotFoundExctption 文件未找到异常

参考资料:https://www.cnblogs.com/cvst/p/5822373.html

  • 自定义异常
    使用Java异常类可以描述在编程时出现的大部分异常的情况,我们只需要继承异常类就可以进行自定义异常的操作。

2. 书面作业

本次PTA作业题集异常

1. 常用异常

结合题集题目7-1回答

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

  1. 自己以前编写的代码经常出现空指针异常,数组越界异常。
  2. 不需要捕获,因为它是RuntimeException,RuntimeException及其子类不要求捕捉。
  3. 数组越界异常可以添加判断,若越界则停止。空指针异常可以检查代码,

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

  1. 非RuntimeException需要用户进行捕捉处理。
  2. 因为这些异常编译器无法避免,所以必须进行捕获处理。

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

题集题目7-2

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

  1. 这题的目标是将数字字符输入进数组,非数字字符舍去。

  2. 如果不处理异常,在输入非输入字符时程序就会崩溃,所以需要进行异常处理。

  3. 异常出现的地点是字符输入进数组时,所以将其放入

     try{
         ...
     }cattch(...){
     }
    

    语句中,同时因为字符没有输入进数组,所以指针也不用后移,所以也应放在该语句中。

  4. 让程序更健壮的方法就是考虑各种可能出现的异常情况并进行捕获,这样即使出现异常程序也不会立即崩溃。

3. throw与throws

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

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

  1. 在检测到错误的时候立即抛出异常,可以省掉后面的无效操作。
  2. 可以帮我们准确定位到错误最早出现在什么地方,让编程更便捷。

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

  1. 需要表明出现异常的具体类。如7-3中的异常java.lang.IllegalArgumentException
  2. 需要表明出现异常的具体原因。如7-3中的begin:3 >= end:3begin:3 >= end:2等等。
  3. 我觉得在某些地方还要表明错误地点,比如在编译器中出现异常它会提示你第几行出了什么样的错。

4. 用异常改进ArrayIntegerStack

题集题目6-3

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

  1. 可以让使用者得到更多关于该错误的信息,比如为何出错,而不是仅仅告诉使用者“你错了”。

  2. 以下面这段代码为例:

     public Integer push(Integer item) throws FullStackException{
         if(capacity==top)
     	    throw new FullStackException();
     	    if(item == null)
     	    	return null;
     	    this.arrStack[this.top]=item;
     	    this.top++;
     	    return item;
     }
    

capacity==top时,会抛出throw new FullStackException();。而单纯返回错误值不能让使用者知道错误原因。

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

  • RuntimeException类型的异常属于Unchecked Exception,因此不需要使用throws关键字来声明。

  • 如果强行用throws关键字来声明,如图

  • 两者并没有本质区别。可以说是画蛇添足了。因为这种异常是需要我们编写代码时去避免的。而不是输入的时候。

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

题集题目6-1

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

答:要注意父类的异常处理要放在子类的后面,否则编译器会报错。

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

答:Java8中的多重异常捕获可以使我们在一个catch语句中捕获多个异常,中间用|隔开,并保证父类在子类后面。

catch(NumberFormatException|IllegalArgumentException|Exception e)

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关闭资源需要注意一些什么?

答:finally语句块一般用来释放资源,因为无论try,catch语句块是否捕捉到异常,finally语句块都会被执行。

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

  • 如图:

  • 可以看出代码量明显缩短,并且使用该语句可以保证自动关闭资源,不必担心try,catch语句中出现疏漏。

参考资料:http://blog.csdn.net/hengyunabc/article/details/18459463

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

登录lib.jmu.edu.cn,对图书进行搜索。然后登录图书馆信息系统,查看我的图书馆。如果让你实现一个图书借阅系统,尝试使用面向对象建模。

7.1 该系统的使用者有谁?

  1. 学生
  2. 老师
  3. 管理及维护人员。

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

用户(张雨阳):

  • 查看
  • 借阅
  • 归还

管理人员(李铎):

  • 查看
  • 添加

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

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

  • 存储图书信息使用Map储存,key值存放存放图书,value值存放数量。
  • 借阅信息使用Map储存,key值存放借阅的图书,value存放借阅者信息。
  • 读者信息使用Set集合存储。

3.码云及PTA

题目集:异常

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

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

3.3 统计本周完成的代码量

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

周次 总代码量 新增代码量 总文件数 新增文件数
1 200 200 3 3
2 308 108 7 4
3 571 263 16 9
5 833 262 19 3
6 1241 408 27 8
7 1784 543 34 7
8 1901 117 36 2
9 2109 325 45 9
10 2509 400 51 6
11 2730 221 58 7
posted on 2017-11-25 19:17  卡卡milan  阅读(352)  评论(1)    收藏  举报