在finally子句中编写try和catch是否被认为是错误的编程?
我在我的main方法中有一个我要关闭的fileInputStream。 我想将.close()放在finally中,所以它无论如何都会关闭。我不想在main方法中添加throws声明,因为它是主要方法:P
}finally{
try {
commandFile.close();
} catch (IOException e) {
throwException(e);
}
}
没关系? 感谢
答案 0 :(得分:9)
不幸的是,在最终方法中需要try / catches的模式是Java 6及之前的重复模式。我认为它实际上是一种不好的做法,但在Java 6中你不能真正避免这种做法(见下面的Java 7)。
另外一个问题是finally块中抛出的任何新异常都会覆盖在到达此块之前抛出的异常。
在Java 7中,特别针对需要关闭资源的情况(try / finally / try / catch构造的大部分用例)新的try-with-resources构造。这也将捕获主要和次要例外。
因此,使用此构造是JDK 7中的最佳实践,是的,因此,您显示的代码在Java 7中是一种不好的做法。