文档

Java™ 教程
隐藏目录
捕获和处理异常
路径:基本的Java类
课程:异常

捕获和处理异常

本节介绍如何使用三个异常处理组件 —— trycatchfinally 块 —— 编写异常处理程序。然后,解释了在Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适用于使用 Closeable 资源(例如流)的情况。

本节的最后部分通过一个示例演示并分析了各种情况下的发生情况。

以下示例定义并实现了一个名为 ListOfNumbers 的类。在构造时,ListOfNumbers 创建了一个包含10个整数元素(值从0到9)的 ArrayListListOfNumbers 类还定义了一个名为 writeList 的方法,该方法将数字列表写入名为 OutFile.txt 的文本文件中。此示例使用了 java.io 中定义的输出类,这些类在 基本 I/O 中有介绍。

// 注意:此类尚未编译。
import java.io.*;
import java.util.List;
import java.util.ArrayList;

public class ListOfNumbers {

    private List<Integer> list;
    private static final int SIZE = 10;

    public ListOfNumbers () {
        list = new ArrayList<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++) {
            list.add(new Integer(i));
        }
    }

    public void writeList() {
	// FileWriter 构造函数会抛出 IOException,必须捕获。
        PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));

        for (int i = 0; i < SIZE; i++) {
            // get(int) 方法会抛出 IndexOutOfBoundsException,必须捕获。
            out.println("Value at: " + i + " = " + list.get(i));
        }
        out.close();
    }
}

粗体显示的第一行是对构造函数的调用。构造函数会在文件上初始化一个输出流。如果文件无法打开,构造函数会抛出 IOException。粗体显示的第二行是对 ArrayList 类的 get 方法的调用,如果其参数的值太小(小于0)或太大(大于当前 ArrayList 包含的元素数量),则会抛出 IndexOutOfBoundsException

如果尝试编译 ListOfNumbers 类,编译器会打印关于 FileWriter 构造函数抛出的异常的错误消息。然而,它不会显示关于 get 抛出的异常的错误消息。原因是构造函数抛出的异常 IOException 是已检查异常,而 get 方法抛出的异常 IndexOutOfBoundsException 是未检查异常。

现在,你已经熟悉了 ListOfNumbers 类以及其中可能引发异常的位置,你可以编写异常处理程序来捕获和处理这些异常。


上一页: 异常捕获或指定要求
下一页: try块