尝试使用资源总是关闭资源

时间:2016-05-31 06:43:26

标签: java try-with-resources

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

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

br会一直关闭吗?我读过Oracle文档说:

  

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

因此无论程序是正常运行还是抛出异常,它都能正常工作。但是System.exitJVM这样的情况如何崩溃呢?我知道这些条件不适用于finally块。那么,尝试资源失败的条件是什么?

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

2 个答案:

答案 0 :(得分:6)

try-with-resource只是一种语法糖,可以帮助您避免弄乱finally子句的麻烦。在try块内发生的任何“java-ish”都不会阻止资源关闭 - 返回,抛出异常等等。

突然终止JVM的任何事情(例如调用System#exit,杀死JVM的进程,拔掉计算机等等)都不会被处理,就像它没有被老式{{1 }。clause。

答案 1 :(得分:0)

如果VM以任何方式终止,则无论如何都将释放任何内存和文件通道。如果您在相应的关闭操作中有自定义代码并且VM崩溃,我希望此代码不会运行但几乎不会发生。大多数错误都由VM处理,在任何情况下都会调用close方法。