9

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

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

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

可以吗?谢谢

4

1 回答 1

9

不幸的是,在 finally 方法中需要 try/catch 的模式是 Java 6 及之前的模式。我认为这实际上是一种不好的做法,但在 Java 6 中您不能真正避免这种做法(请参阅下面的 Java 7)。

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

在 Java 7 中,专门针对需要关闭资源的情况(try/finally/try/catch 构造的大多数用例)新的 try-with-resources 构造。这还将捕获主要和次要异常。

因此,现在使用此构造是 JDK 7 中的最佳实践,是的,您展示的代码因此在 Java 7 中是一个不好的实践。

于 2012-04-01T14:23:23.880 回答