资源尝试是否总是关闭资源,而不考虑错误条件?我的意思是考虑下面的代码:
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}br会永远关闭吗?我读过Oracle文档,其中说:
无论try语句是否正常或突然完成,它都将关闭。
因此,无论程序正常运行还是抛出异常,它都能工作。但是,像System.exit或JVM崩溃这样的情况又如何?我知道这些条件不会适用于finally块。那么,是否存在资源尝试失败的条件呢?
这只是我的好奇,能不能有人把这件事弄清楚?
发布于 2016-05-31 06:48:51
使用资源尝试只是一种语法糖,可以避免使用finally子句的麻烦。在try块中发生的“java”不会阻止资源关闭-返回、抛出异常等等。
任何突然终止JVM的东西(例如调用System#exit、杀死JVM进程、拔出计算机等等)。不会被处理,就像它不会被一个老式的finally子句处理一样。
发布于 2016-05-31 06:48:15
如果VM以任何方式终止,任何内存和文件通道都将被释放。如果您在各自的关闭操作中有自定义代码,并且VM崩溃,我希望这段代码不会运行,但几乎不会发生这种情况。大多数错误都是由VM处理的,在任何情况下都将调用close方法。
https://stackoverflow.com/questions/37538592
复制相似问题