【发布时间】:2017-05-03 13:21:20
【问题描述】:
从 Java 7 开始,我们可以将try 与资源一起使用:
try (One one = new One(); Two two = new Two()) {
System.out.println("try");
} catch (Exception ex) { ... }
现在我的问题是,为什么我必须在try-statement 中创建对象?为什么我不允许在这样的语句之前创建对象:
One one = new One();
try (one; Two two = new Two()) {
System.out.println("try");
} catch (Exception ex) { ... }
我没有看到任何原因,为什么这应该是一个问题。虽然我收到错误消息“此语言级别不支持资源引用”。我将我的 IDE (IntelliJ IDEA) 设置为 Java 8,这样应该可以工作。不允许这样做有充分的理由吗?
【问题讨论】:
-
因为如果在构造函数中抛出异常,您将无法捕获它。
-
是的,这可能是原因,我同意。我说得对吗,这只是他们做出的一个选择 - 本来可以允许在外部创建对象 - 我们只是不会捕获那里创建的异常 - 对吗?
-
try在实例上没有意义,已经创建的实例中没有逻辑。但是,在其构建过程中,您可能需要处理一些例外情况。 -
资源使用时有逻辑,所以可能会抛出异常。
-
try中不需要有构造函数,只需要局部变量声明和赋值即可:
One one = new One(); try (One one2 = one) { ... }有效。