关于try-with-resources语法的另外一个问题

netepic 2016-06-28 12:16:35
我对定义了多个资源的try-with-resources语句有些不太理解的地方:
当使用try-with-resources语法来定义两个资源时,例如如下代码:
try(A a = new A(); B b = new B();) {
doSomething();}


请问这段代码被编译器展开后是否相当于如下代码:
		final A a = new A();
Throwable primaryExc = null;

try (B b = new B()) { //当try-with-resources语句含有n个资源时,递归展开为n-1个资源的try-with-resources语句
doSomething();
} catch (Throwable t) {
primaryExc = t;
throw t;
} finally {
if (a != null) {
if (primaryExc != null) {
try {
a.close();
} catch (Throwable suppressedExc) {
primaryExc.addSuppressed(suppressedExc);
}
} else {
a.close();
}
}
}


请问各位大神,我的理解有没有错误?

------------------------------------------------------------------------更新------------------------------------------------------------------------
刚刚经过反编译测试,发现两个代码的生成jvm指令和异常处理表是一模一样的,验证我的理解是正确的,现在终于彻底搞懂了try-with-resources语法了。
...全文
108 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧