假设我在方法签名中抛出异常 - 像IOException这样的异常。
我知道我不能在方法中使用finally范围来关闭我已创建的流,因为我不使用try和catch在我的代码中。 那么是什么确保这些流将在我的程序中接近?
谢谢!
答案 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
块中抛出异常通常是个坏主意。)