假设我在方法签名中抛出了一个异常-类似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
块抛出异常通常是个坏主意)。