java - try-with-resources 总是会关闭资源

标签 java try-with-resources

无论错误情况如何,try-with-resources 都会始终关闭资源吗?我的意思是考虑以下代码:

try (BufferedReader br =
               new BufferedReader(new FileReader(path))) {
    return br.readLine();
}

br 会一直关闭吗?我已阅读 Oracle 文档,其中说:

it will be closed regardless of whether the try statement completes normally or abruptly

所以不管程序是正常运行还是抛出异常都会起作用。但是像 System.exitJVM 崩溃这样的情况呢?我知道这些条件不适用于 finally block 。那么是否存在 try-with-resources 失败的条件?

这只是我的好奇心,有人可以解释一下吗?

最佳答案

try-with-resource 只是一种语法糖,可以让您免于混淆 finally 子句的麻烦。 try block 内发生的任何“java-ish”都不会阻止资源关闭 - 返回、抛出异常等。

任何突然终止 JVM 的事情(比如调用 System#exit、杀死 JVM 的进程、拔掉计算机的电源等)都不会被处理,就像它不是由旧的处理程序一样- 时尚的 finally 子句。

关于java - try-with-resources 总是会关闭资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538592/

相关文章:

java - 为什么 try-with-resources 不能与字段变量一起使用?

java - 为什么 try-with-resource 需要一个局部变量?

java - 如何修复此 Try-With-Resources block 中出现的 "SQLServerException: The connection is closed."问题?

java - 为什么在使用 try-with-resources 时在 try() 中声明 Resource

java - 如何从 try-with-resources 捕获异常?

java - JAX-WS:如何向 SOAP 响应添加额外的 XML 命名空间

java - RecyclerView 之上的透明 TextView

java - 使用 BlockingQueue 下载 PDF 文件

java - 不明白错误信息

java - 如何在用户开始添加文本时消失的 JavaFX TextArea 中创建灰色文本?