Java带资源的try语句:资源关闭顺序及代码运行结果问询
分析带资源try语句的运行结果与资源关闭顺序
咱们一步步拆解这段代码的运行流程,看看最终输出和背后的规则:
- 程序进入
try-with-resources块,先完成MyResource1 r1和MyResource2 r2的初始化,然后执行try块内的代码,输出T。 - try块执行完成后,触发资源关闭逻辑——这里是核心规则:带资源的try语句,资源关闭顺序是声明顺序的逆序。所以先关闭后声明的
r2,它的close()方法抛出IOException。 - 紧接着关闭先声明的
r1,它的close()方法正常执行,输出1。 r2关闭时抛出的异常被后续catch块捕获,执行catch内代码输出IOE。- 最后执行
finally块的代码,输出F。
所以这段代码的最终运行结果是:
T 1 IOE F
带资源try语句的资源关闭关键规则
- 逆序关闭:在
try括号里先声明的资源,会被最后关闭;后声明的资源,会被最先关闭。比如本例中r1先声明、r2后声明,关闭时先关r2,再关r1。 - 异常不阻断关闭:即使某一个资源的
close()方法抛出异常,其他未关闭的资源仍然会被尝试关闭,不会因为前面的异常而终止关闭操作。
内容的提问来源于stack exchange,提问作者dileepVikram
相关产品推荐
相关产品推荐

