代码改变世界

201521123051《Java程序设计》第九周学习总结

2017-04-22 19:10  jmu201521123051  阅读(229)  评论(0编辑  收藏  举报

1. 本周学习总结

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

·所有的异常类是从 java.lang.Exception 类继承的子类。
·Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
·Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
·Error 用来指示运行时环境发生的错误。例如,JVM 内存溢出。一般地,程序不会从错误中恢复。
· Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。
·通常,Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)。 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。

2. 书面作业

本次PTA作业题集异常

1.常用异常

题目5-1

1.1 截图你的提交结果(出现学号)

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

常见异常:java.lang.IndexOutOfBoundsException(数组下标越界异常)、Java.lang.NullPointerException(空指针异常) 、java.lang.ClassNotFoundException(指定的类不存在)、 java.lang.NumberFormatException(字符串转换为数字异常)、java.lang.ClassCastException(数据类型转换异常)、java.lang.FileNotFoundException(文件未找到异常)等等.

不需要捕获异常,因为大部分都是RuntimeException及其子类的不可查的异常(unchecked exceptions)。

只能通过自己养成良好的编程习惯,在细节上反复斟酌代码,避免类似异常.

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

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

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

题目5-2

2.1 截图你的提交结果(出现学号)

2.2 实验总结

小细节:Integer.parseInt(String)就是将String字符类型数据转换为Integer整型数据,Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常.

3.throw与throws

题目5-3

3.1 截图你的提交结果(出现学号)

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

Integer.parsetInt源代码

如图举例抛出了一个NumberFormatException异常时,可知抛出异常时需要传递给调用者关于异常的类型,原因.

4.函数题

题目4-1(多种异常的捕获)

4.1 截图你的提交结果(出现学号)

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

一个try块后有两个catch块,这很正常,因为,在try块中包含众多语句,可能抛出多种不同的异常,只有通过多个catch块来捕获不同的异常。

而如果多个异常之间存在继承关系,应该把子类异常放在你类异常的前面来捕获。异常是就近捕捉,抛出子类异常可以捕捉到父类也可以捕捉到子类,如果父类放前面就不会捕捉到子类了,系统会报错(异常屏蔽)。

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

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(FileNotFoundException ex)
    {
        System.out.println(ex);
    }
    catch(IOException ex)
    {
        System.out.println(ex);
    }
    finally {
        System.out.println("close resource");
        try
        {
            fis.close();
        } catch(IOException ex){
            
        }
    }

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

   try(FileInputStream fis=new FileInputStream("testfis.txt"))
    {
        byte[] content = null;
        try {
            int bytesAvailabe = fis.available();//获得该文件可用的字节数
            if (bytesAvailabe > 0) {
                content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
                fis.read(content);//将文件内容读入数组
                }
                System.out.println(Arrays.toString(content));//打印数组
        }
        catch(FileNotFoundException ex)
        {
            System.out.println(ex);
        }
        catch(IOException ex)
        {
            System.out.println(ex);
        }
    }catch(IOException ex){
        ex.printStackTrace();
    }

3. 码云上代码提交记录

题目集:异常

3.1. 码云代码提交记录

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