在 java 中使用资源和返回语句

2022-08-31 15:12:06

我想知道将 return 语句放在资源试用块中是否会阻止资源自动关闭。

try(Connection conn = ...) {
    return conn.createStatement().execute("...");
}

如果我写这样的东西,连接会关闭吗?在 Oracle 文档中,它指出:

资源试用语句确保在语句末尾关闭每个资源。

如果由于 return 语句而从未到达语句的末尾,会发生什么情况?


答案 1

根据Oracle的教程,“无论try语句是否正常或突然完成,[资源]都将被关闭”。它定义为来自异常。abruptly

返回内部是 JLS 14.1 定义的突然完成的一个示例。try


答案 2

资源将自动关闭(即使使用语句),因为它实现了接口。下面是一个输出“成功关闭”的示例:returnAutoCloseable

public class Main {

    public static void main(String[] args) {
        try (Foobar foobar = new Foobar()) {
            return;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Foobar implements AutoCloseable {

    @Override
    public void close() throws Exception {
        System.out.println("closed successfully");
    }
}