java中的try-with-resources和return语句

2022-01-19 00:00:00 return java try-with-resources

我想知道在 try-with-resources 块中放置 return 语句是否会阻止资源自动关闭.

I'm wondering if putting a return statement inside a try-with-resources block prevents the resource to be automatically closed.

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

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

If I write something like this will the Connection be closed? In the Oracle documentation it is stated that:

try-with-resources 语句确保每个资源在语句结束时关闭.

The try-with-resources statement ensures that each resource is closed at the end of the statement.

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

What happens if the end of the statement is never reached because of a return statement?

推荐答案

基于Oracle的教程, "[资源] 将被关闭,无论 try 语句是正常完成还是突然完成".它将 abruptly 定义为来自异常.

Based on Oracle's tutorial, "[the resource] will be closed regardless of whether the try statement completes normally or abruptly". It defines abruptly as from an exception.

try 中返回是突然完成的一个例子,如 JLS 14.1.

Returning inside the try is an example of abrupt completion, as defined by JLS 14.1.

相关文章