在方法签名中引发IOException



假设我在方法签名中抛出了一个异常-类似IOException的异常。

我知道我不能在方法中使用finally scope来关闭我已经创建的流,因为我在代码中不使用try-and-catch。那么,如何确保这些流在我的程序中是关闭的呢?

谢谢!

使用try时不必有catch块;您也可以只拥有一个finally块。在try块中抛出的异常将被抛出方法,但当异常发生时,finally块仍将被执行。

public void myMethod() throws IOException {
    InputStream in = new FileInputStream("...");
    try {
        // Do stuff that might throw IOException
    } finally {
        in.close();
    }
}

然而,使用try-and-resources构造(自Java7以来的一个新特性)要好得多:

public void myMethod() throws IOException {
    try (InputStream in = new FileInputStream("...")) {
        // Do stuff that might throw IOException
    }
}

执行此操作时,不必显式关闭InputStream;它将自动发生(无论是否发生异常)。

(第一种方法的问题还在于,in.close();也可能抛出IOException,而从finally块抛出异常通常是个坏主意)。

相关内容

  • 没有找到相关文章

最新更新