# 指定方法引发的异常

> 原文： [https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html)

上一节介绍了如何为`ListOfNumbers`类中的`writeList`方法编写异常处理程序。有时，代码可以捕获可能在其中发生的异常。但是，在其他情况下，最好让调用堆栈中的方法进一步处理异常。例如，如果您将`ListOfNumbers`类作为类包的一部分提供，则可能无法预测包的所有用户的需求。在这种情况下，最好 _ 而不是 _ 捕获异常并允许进一步调用堆栈的方法来处理它。

如果`writeList`方法没有捕获可能在其中发生的已检查异常，则`writeList`方法必须指定它可以抛出这些异常。让我们修改原始的`writeList`方法来指定它可以抛出而不是捕获它们的异常。提醒您，这是无法编译的`writeList`方法的原始版本。

```
public void writeList() {
    PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
    for (int i = 0; i < SIZE; i++) {
        out.println("Value at: " + i + " = " + list.get(i));
    }
    out.close();
}

```

要指定`writeList`可以抛出两个异常，请将`throws`子句添加到`writeList`方法的方法声明中。 `throws`子句包含`throws`关键字，后跟逗号分隔的该方法抛出的所有异常列表。该子句在方法名称和参数列表之后以及定义方法范围的大括号之前;这是一个例子。

```
public void writeList() throws IOException, IndexOutOfBoundsException {

```

请记住，`IndexOutOfBoundsException`是未经检查的异常;在`throws`子句中包含它不是强制性的。你可以写下面的内容。

```
public void writeList() throws IOException {

```