在 Kathy Sierra 所著的《OCP Java SE 8 Programmer II》一书中,第 187 页指出:
以下合法代码演示了不带资源的尝试 抓住或最后:
try (Reader reader = new BufferedReader(new FileReader(file))) { // do stuff }
但是当我在 IntelliJ、Java 8 中尝试时,它无法编译。我试图找到这本书的勘误表,但没有找到。我在这里缺少什么?
但是,当我剪切并粘贴您的代码时,我只看到一个问题。 具体来说,
java.io
包中的几个方法/构造函数会抛出 java.io.IOException
或其子类之一的异常。
因此,至少您需要为
IOException
添加一个 catch 子句,或者声明该方法可以抛出 IOException
换句话说,尽管书上说:
以下合法代码演示了不带资源的尝试 抓住或终于
确实,您可以有一个没有 catch 子句的特定块,但是如果您选择省略 catch 子句,它不会消除您处理(或传递)异常的需要。
也就是说,你不必在这里处理异常 - 但你必须在某个地方处理它。