文档

Java™ 教程
路径:基本的Java类
课程:异常
主页 > 基本的Java类 > 异常

问题和练习的答案

问题

  1. 问题:以下代码合法吗?
    try {
        
    } finally {
       
    }
    
    答案:是的,它是合法的 - 而且非常有用。如果try语句没有catch块,但有finally块,也是合法的。如果try语句中的代码有多个退出点并且没有关联的catch子句,无论如何退出try块,都会执行finally块中的代码。因此,在存在必须始终执行的代码时,提供finally块是有意义的。这包括资源恢复代码,例如关闭I/O流的代码。
  2. 问题:以下处理程序可以捕获哪些异常类型?
    catch (Exception e) {
         
    }
    
    使用这种类型的异常处理程序有什么问题?

    答案:这个处理程序可以捕获Exception类型的异常,因此可以捕获任何异常。这可能是一个不好的实现,因为你正在丢失有关所抛出异常类型的有用信息,并使代码效率降低。结果,程序可能被迫在决定最佳恢复策略之前确定异常类型。

  3. 问题:按照原文的方式,这个异常处理程序有什么问题?这段代码能通过编译吗?
    try {
    
    } catch (Exception e) {
       
    } catch (ArithmeticException a) {
        
    }
    
    答案:第一个处理程序捕获Exception类型的异常,因此可以捕获任何异常,包括ArithmeticException。第二个处理程序永远不会被执行到。这段代码将无法通过编译。
  4. 问题:将第一个列表中的每个情况与第二个列表中的项进行匹配。
    1. int[] A;
      A[0] = 0;
    2. JVM开始运行程序,但找不到Java平台类。(Java平台类位于classes.ziprt.jar中。)
    3. 程序正在读取流,并到达end of stream标记。
    4. 在关闭流之前并在到达end of stream标记后,程序尝试再次读取流。
    1. __错误
    2. __已检查异常
    3. __编译错误
    4. __没有异常

    答案:

    1. 3(编译错误)。数组未初始化,因此无法通过编译。
    2. 1(错误)。
    3. 4(没有异常)。当你读取流时,你期望有一个流结束的标记。你应该使用异常来捕获程序中的意外行为。
    4. 2(已检查异常)。

练习

  1. 练习:ListOfNumbers.java中添加一个readList方法。这个方法应该从一个文件中读取int值,打印每个值,并将它们追加到向量的末尾。你应该捕获所有适当的错误。你还需要一个包含要读取的数字的文本文件。

    答案: 请参见 ListOfNumbers2.java.

  2. 练习: 修改以下的cat方法,使其能够编译:
    public static void cat(File file) {
        RandomAccessFile input = null;
        String line = null;
    
        try {
            input = new RandomAccessFile(file, "r");
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            return;
        } finally {
            if (input != null) {
                input.close();
            }
        }
    }
    

    答案: 加粗显示了捕获异常的代码:

    public static void cat(File file) {
        RandomAccessFile input = null;
        String line = null;
    
        try {
            input = new RandomAccessFile(file, "r");
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            return;
        } catch(FileNotFoundException fnf) {
            System.err.format("文件: %s 未找到%n", file);
        } catch(IOException e) {
            System.err.println(e.toString());
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch(IOException io) {
                }
            }
        }
    }
    

上一页: 问题和练习