尝试资源总是会关闭资源

Pra*_*mha 3 java try-with-resources

尝试使用资源总是关闭资源而不管错误情况如何?我的意思是考虑以下代码:

try (BufferedReader br =
               new BufferedReader(new FileReader(path))) {
    return br.readLine();
}
Run Code Online (Sandbox Code Playgroud)

br永远关闭吗?我读过Oracle文档说:

无论try语句是正常还是突然完成,它都将被关闭

因此,无论程序是正常运行还是抛出异常,它都会起作用.但是条件如崩溃System.exit还是JVM崩溃呢?我知道这些条件不适用于finally阻止.那么尝试资源失败的条件是什么?

这只是我要求好奇心,有人可以对此有所了解吗?

Mur*_*nik 7

try-with-resource只是一种语法糖,可以帮你省去乱搞finally条款的麻烦.在try块内发生的任何"java-ish" 都不会阻止资源关闭 - 返回,抛出异常等.

任何突然终止JVM的东西(例如调用System#exit,杀死JVM的进程,拔掉计算机等等)都不会被处理,就像它没有被老式finally条款处理一样.

  • 请参阅[JLS Sec 14.20.3.1](https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20.3.1)获取"desugared"形式的尝试使用资源块. (3认同)