[英]Will try-with-resources always close the resources
尝试使用资源总是关闭资源而不管错误情况如何? 我的意思是考虑以下代码:
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
br
一直关闭吗? 我读过Oracle文档说:
无论try语句是正常还是突然完成,它都将被关闭
因此,无论程序是正常运行还是抛出异常,它都会起作用。 但是System.exit
或JVM
等条件崩溃了怎么办? 我知道这些条件不适用于finally
块。 那么尝试资源失败的条件是什么?
这只是我要求好奇心,有人可以对此有所了解吗?
try-with-resource只是一种语法糖,可以帮你省去乱搞finally
子句的麻烦。 在try
块中发生的“java-ish”都不会阻止资源关闭 - 返回,抛出异常等。
任何突然终止JVM的东西(例如调用System#exit
,杀死JVM的进程,拔掉计算机等等)都不会被处理,就像它没有被老式的finally
子句处理一样。
如果VM以任何方式终止,则无论如何都将释放任何内存和文件通道。 如果您在相应的关闭操作中有自定义代码并且VM崩溃,我希望此代码不会运行但几乎不会发生。 大多数错误都由VM处理,在任何情况下都会调用close方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.