文档

Java™ 教程-Java Tutorials 中文版
Trail: Essential Classes
Lesson: Exceptions
主页>必要类>异常

问题和练习的答案

问题

  1. 问题:以下代码是否合法?
    try {
        
    } finally {
       
    }
    
    答案:是的,这是合法的 — 非常有用的。一个 try 语句如果有 finally 块,则不必有 catch 块。如果 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 开始运行你的程序,但 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. 练习:readList 方法添加到 ListOfNumbers.java。此方法应从文件中读取 int 值,打印每个值,并将它们附加到 vector 的末尾。你应该捕获所有适当的错误。你还需要一个包含要读入的数字的文本文件。

    答案:参见 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("File: %s not found%n", file);
        } catch(IOException e) {
            System.err.println(e.toString());
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch(IOException io) {
                }
            }
        }
    }
    

Previous page: Questions and Exercises