Catching and Handling Exceptions

Catching and Handling Exceptions

This section describes how to use the three exception handler components — the try, catch, and finally blocks — to write an exception handler. Then, the try-with-resources statement, introduced in Java SE 7, is explained. The try-with-resources statement is particularly suited to situations that use Closeable resources, such as streams.

这节描述如何去使用三个异常处理器组件 - trycatchfinally blocks - 去写一个异常处理器。然后将会解释在Java SE 7中引入的try-with-resources语句。try-with-resources语句特别适合使用Closeable类型资源的情形,比如流。

The last part of this section walks through an example and analyzes what occurs during various scenarios.

这节的最后一部分将会通过查看一个例子,分析在不同的场景下会发生什么。

The following example defines and implements a class named ListOfNumbers. When constructed, ListOfNumbers creates an ArrayList that contains 10 Integer elements with sequential values 0 through 9. The ListOfNumbers class also defines a method named writeList, which writes the list of numbers into a text file called OutFile.txt. This example uses output classes defined in java.io, which are covered in Basic I/O.

下面的例子定义和实现了一个叫ListOfNumbers的类。当这个类的对象被构造时,它创建了一个包含了数值从0到9的ArrayList对象。这个类同样定义了一个叫做writeList的方法,这个方法会将list中的数值写入到一个叫做OutFile.txt的文本文件中。这个例子使用了在java.io中定义的一个输出类,覆盖了基本的I/O

// Note: This class will not compile yet.
import java.io.*;
import java.util.List;
import java.util.ArrayList;

public class ListOfNumbers {

    private List list;
    private static final int SIZE = 10;

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

    public void writeList() {
    // The FileWriter constructor throws IOException, which must be caught.
        PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));

        for (int i = 0; i < SIZE; i++) {
            // The get(int) method throws IndexOutOfBoundsException, which must be caught.
            out.println("Value at: " + i + " = " + list.get(i));
        }
        out.close();
    }
}

The first line in boldface is a call to a constructor. The constructor initializes an output stream on a file. If the file cannot be opened, the constructor throws an IOException. The second boldface line is a call to the ArrayList class’s get method, which throws an IndexOutOfBoundsException if the value of its argument is too small (less than 0) or too large (more than the number of elements currently contained by the ArrayList).

黑体中的第一行被称为构造器。构造器初始化在文件上的输出流。如果文件不能被打开,构造器将会抛出IOException。第二行黑体是调用ArrayList类的get方法,如果方法的参数值太小(小于0)或是太大(超过ArrayList当前包含的元素数量),它将抛出IndexOutOfBoundsException

If you try to compile the ListOfNumbers class, the compiler prints an error message about the exception thrown by the FileWriter constructor. However, it does not display an error message about the exception thrown by get. The reason is that the exception thrown by the constructor, IOException, is a checked exception, and the one thrown by the get method, IndexOutOfBoundsException, is an unchecked exception.

如果你试着编译ListOfNumbers类,编译器将会打印一个关于被FileWriter构造器抛出异常的错误消息。然而它不会显示关于被get方法抛出异常的错误信息。原因是被构造器抛出的异常IOException是一个受检查异常,被get方法抛出的异常IndexOutOfBoundException是一个未检查异常。

Now that you’re familiar with the ListOfNumbers class and where the exceptions can be thrown within it, you’re ready to write exception handlers to catch and handle those exceptions.

现在你已经熟悉了ListOfNumbers类和其中哪些地方可能会被抛出异常,你已经准备好去写异常处理器去捕获和处理那些异常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章