Java try与资源创建的执行顺序
我尝试使用资源块,从Blob对象创建ObjectInputStream的新实例,例如Java try与资源创建的执行顺序,java,stream,try-catch,java-7,Java,Stream,Try Catch,Java 7,我尝试使用资源块,从Blob对象创建ObjectInputStream的新实例,例如 try(ObjectInputStream mObjectStream = new ObjectInputStream(mblob.getBinaryStream())) { ... } 但是,如果在.getBinaryStream()抛出异常,mObjectStream对象可能未发布,这与我的应用程序有关 我已考虑将其分开如下 try(InputStream mStream = mblob.getBinar
try(ObjectInputStream mObjectStream = new ObjectInputStream(mblob.getBinaryStream()))
{
...
}
但是,如果在.getBinaryStream()抛出异常,mObjectStream对象可能未发布,这与我的应用程序有关
我已考虑将其分开如下
try(InputStream mStream = mblob.getBinaryStream(); ObjectInputStream mObjectStream = new ObjectInputStream(mStream){
...
}
如果先创建mObjectStream,这会导致问题吗?或者在这种情况下,总是先创建mStream
try(InputStream mStream = mblob.getBinaryStream();
ObjectInputStream mObjectStream = new ObjectInputStream(mStream))
当您列出并打开多个资源时,它们将按照声明顺序创建。i、 首先创建e mStream,然后创建mObjectStream
此外,它们将按相反的顺序关闭。最新的将首先关闭,然后是旧的。这应该不是问题:如果
getBinaryStream()
引发异常,那么将不会首先创建mObjectStream
,因为构造函数仅在getBinaryStream()
返回后调用
但是,要回答后续问题:
finally
块来显式关闭它谢谢,这正是我想知道的。我接受了这个答案,因为它直接链接到文档。