无论错误情况如何,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.exit
或 JVM
崩溃这样的情况呢?我知道这些条件不适用于 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/