参见代码:
我通常喜欢下面的
RandomAccessFile raf = null;
try {
// do something ...
} catch (IOException e) {
// logger
} finally {
try {
if (null != raf) {
raf.close();
}
} catch (IOException e) {
// logger
}
}
然后我看到我可以在Java8中执行此操作
try (RandomAccessFile raf = ... ) {
// do something ...
} catch (IOException e) {
// logger
}
这似乎是一个好方法。
看起来Java可以完成关闭IO的工作。
编辑1
就个人而言,我喜欢第二种方式。
但使用效果好还是性能很好?
答案 0 :(得分:2)
使用Java 7或更高版本,如果资源实现AutoCloseable
,最佳做法是使用try-with-resources:
try (
RandomAccessFile raf = /*construct it */
) {
// Use it...
}
资源将自动关闭。 (是的,catch
和finally
子句是try-with-resources的可选项。)
关于你问题中的代码:
重新发布主catch
块:“记录并忘记”通常不是最佳做法。要么没有捕获异常(所以调用者可以处理它)或正确处理它。
在catch
你正在关闭的finally
区块中,你很可能不允许抛出(你可以掩盖主要的异常),但是看看规范定义try-with-resources的方式,并考虑遵循该模式,其中包括来自close的任何异常suppressed exception。