你所指的是检查异常,这意味着必须声明或处理它们。用Java处理文件的标准结构如下所示:
InputStream in = null;
try {
in = new InputStream(...);
// do stuff
} catch (IOException e) {
// do whatever
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
}
}
}
丑吗?当然。冗长吗?当然。Java 7将通过ARM块使其变得更好一些,但是直到那时,你仍然只能使用上面的代码。
你还可以让调用方处理异常:
public void doStuff() throws IOException {
InputStream in = new InputStream(...);
// do stuff
in.close();
}
尽管即使这样,也close()
应该将其包装成一个finally
块。
但是上面的函数声明说这个方法可以抛出一个IOException
。由于这是一个已检查的异常,此函数的调用者将需要catch
它(或声明它,以便其调用者可以处理它,依此类推)。