尝试抓住最后一节

时间:2012-04-01 14:11:04

标签: java try-catch-finally

在finally子句中编写try和catch是否被认为是错误的编程?

我在我的main方法中有一个我要关闭的fileInputStream。 我想将.close()放在finally中,所以它无论如何都会关闭。我不想在main方法中添加throws声明,因为它是主要方法:P

    }finally{
        try {
            commandFile.close();
        } catch (IOException e) {
            throwException(e);
        }
    }

没关系? 感谢

1 个答案:

答案 0 :(得分:9)

不幸的是,在最终方法中需要try / catches的模式是Java 6及之前的重复模式。我认为它实际上是一种不好的做法,但在Java 6中你不能真正避免这种做法(见下面的Java 7)。

另外一个问题是finally块中抛出的任何新异常都会覆盖在到达此块之前抛出的异常。

在Java 7中,特别针对需要关闭资源的情况(try / finally / try / catch构造的大部分用例)新的try-with-resources构造。这也将捕获主要和次要例外。

因此,使用此构造是JDK 7中的最佳实践,是的,因此,您显示的代码在Java 7中是一种不好的做法。