201521123114《Java程序设计》第9周学习总结

1. 本章学习总结

2. 书面作业

Q1. 常用异常
题目5-1
1.1 截图你的提交结果(出现学号)

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

经常出现的异常有ArrayIndexOutOfBoundsException、 NullPointerException、ClassCastException,
不需要捕获,因为它们都继承自RuntimeException异常类;
第一个可通过对数组定义长度来避免,第二个可通过对变量设置初始值来避免,第三个是实际对象和引用不是同一个类型,自己要注意。

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

除了Error与RuntimeException及其子类以外的异常都是Checked Exception,一定要使用捕获处理。

Q2. 处理异常使你的程序更加健壮
题目5-2
2.1 截图你的提交结果(出现学号)

2.2 实验总结

首先实例化一个数组,然后循环输入数据,用try-catch来实现当输入的是非整型字符串提示异常。在捕获到异常之后的重新输入,
一定要记得将非整型字符串从数组中去掉,否则它将占用数组的一个位置,导致最后一个整型字符串无法进入数组。

Q3. throw与throws
题目5-3
3.1 截图你的提交结果(出现学号)

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

需要让调用者知道编译器对这段代码抛出什么异常及其原因。该源代码在输入为null、radix < Character.MIN_RADIX、radix > Character.MAX_RADIX
等情况的时候将抛出NumberFormatException异常,并提示抛出这个异常的原因。在3.1中输入 0 6时,应该及时抛出ArrayIndexOutOfBoundsException
说明数组越界,让读者明白输入的范围。

Q4.函数题
题目4-1(多种异常的捕获)
4.1 截图你的提交结果(出现学号)

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

捕获时需要注意这多种异常之间的继承关系,子类必须在父类之前先被捕获,否则会发生错误;在相同继承层次的可以不考虑排列顺序。

Q5. 为如下代码加上异常处理

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

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

 byte[] content = null;
FileInputStream fis = null;
try {
    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));//打印数组内容
} catch (IOException e) {
        e.printStackTrace();
}finally{
        if(fis != null){
            try{
                fis.close();
            }catch(IOException e){
                 e.printStackTrace();    
            }
}

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

 byte[] content = null;
 try (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));//打印数组内容 
} catch (IOException e) {
      e.printStackTrace();
}
}

3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

原文地址:https://www.cnblogs.com/s114/p/6747919.html