在方法签名中抛出IOException

时间:2016-05-04 08:52:06

标签: java stream

假设我在方法签名中抛出异常 - 像IOException这样的异常。

我知道我不能在方法中使用finally范围来关闭我已创建的流,因为我不使用try和catch在我的代码中。 那么是什么确保这些流将在我的程序中接近?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

但是,使用try-with-resources构造(自Java 7以来的新功能)要好得多:

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

当你这样做时,你不必明确地关闭InputStream;它会自动发生(是否发生异常)。

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