为要由 java 的 try with resources 语句管理的资源声明自变量
Posted
技术标签:
【中文标题】为要由 java 的 try with resources 语句管理的资源声明自变量【英文标题】:Declaring independent variables for resources to be managed by java's try with resources statement 【发布时间】:2014-07-22 13:15:37 【问题描述】:以下两个选项在语义上有区别吗?在自动资源管理方面,它们中的任何一个都比另一个更安全吗?
选项1:
try ( ObjectInputStream in = new ObjectInputStream(new
FileInputStream("fooFile")) )
...
选项2:
try (FileInputStream fin = new FileInputStream("fooFile");
ObjectInputStream in = new ObjectInputStream(fin))
...
【问题讨论】:
我不确定,但我认为在第二个示例中,两个流分别关闭,如果ObjectInputStream
缓存一些数据并且 FileInputStream
先关闭,这可能会出现问题。跨度>
@isnot2bad 他们总是保证以相反的顺序关闭。所以在我上面的代码中in
将首先关闭,然后只有fin
将被关闭。所以你的观点没有实际意义。
唯一的区别是你会在fin
上得到一个多余的close
调用,但根据AutoCloseable
合约,这不会导致任何错误。
很简单,fin
被声明为托管资源,因此它自然会调用其close
方法。这将是多余的,因为此时它已经关闭(in.close()
已在内部级联到 fin.close()
)。
***.com/a/21348893/1419315 存在的论点本质上是,对于第一个变体,FileInputStream.close ()
在ObjectInputStream
的构造 失败时不会被调用。
【参考方案1】:
请看这里:http://www.***.com/a/21348893/1419315
本质上,存在的论点是,对于第一个变体,FileInputStream.close ()
将不会在 ObjectInputStream
的构造失败时被调用。
【讨论】:
以上是关于为要由 java 的 try with resources 语句管理的资源声明自变量的主要内容,如果未能解决你的问题,请参考以下文章
java中的try-with-resources和return语句