尝试资源总是关闭资源而不管错误情况如何?我的意思是考虑下面的代码:
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
br
会一直关闭吗?我读过Oracle文档说:
无论try语句是正常还是突然完成,它都将被关闭
因此无论程序是正常运行还是抛出异常,它都能正常工作。但是System.exit
或JVM
这样的情况如何崩溃呢?我知道这些条件不适用于finally
块。那么,尝试资源失败的条件是什么?
这只是我要求好奇心,有人可以对此有所了解吗?
答案 0 :(得分:6)
try-with-resource只是一种语法糖,可以帮助您避免弄乱finally
子句的麻烦。在try
块内发生的任何“java-ish”都不会阻止资源关闭 - 返回,抛出异常等等。
突然终止JVM的任何事情(例如调用System#exit
,杀死JVM的进程,拔掉计算机等等)都不会被处理,就像它没有被老式{{1 }。clause。
答案 1 :(得分:0)
如果VM以任何方式终止,则无论如何都将释放任何内存和文件通道。如果您在相应的关闭操作中有自定义代码并且VM崩溃,我希望此代码不会运行但几乎不会发生。大多数错误都由VM处理,在任何情况下都会调用close方法。