程序员对finally语句的误解?

try {
  doAction();
} catch(Exception e) {
   log.error(e,e);
   throw e;
} finally {
   doEnd();
}

是java中比较常见的编码方法。

但是在实际的编码过程中发现一些程序员并不能很好的理解这个语句的执行流程。从而产生一些不是很恰当的写法。

比如最常见的jdbc的事物管理中,牵涉到中途return,画面迁移的情况下面的一些例子。

一般写法

trn.open();  //打开连接
try {
  doAction();
  trn.commit();  //事务提交
} catch(Exception e) {
   trn.rollback();  //事务回滚
   log.error(e,e);
   throw e;
} finally {
   trn.close();  //关闭连接
}

不好的写法1:中途return的时候

trn.open();
try {
  boolean flag = doAction1();
   if (!flag) {
      return;
   }
    trn.commit();
} catch(Exception e) {
   log.error(e,e);
   throw e;
} 

没有finally语句,中途return的时候就不会释放连接资源。


不好的写法2:画面迁移

trn.open();  //打开连接
try {
  boolean flag = doAction();
  if (!flag) {
     trn.close(); //迁移前关闭资源
     mapping.findForward("tonextpage");//画面迁移
  }
   doActon2();
  trn.commit();  //事务提交
} catch(Exception e) {
   trn.rollback();  //事务回滚
   log.error(e,e);
   throw e;
} finally {
   trn.close();  //关闭连接
}
在画面迁移前专门写了关闭资源的处理。

等等,很多种写法我都遇到过,其实说到底就是对finally理解不到位。

即使画面迁移,中途return等等,只要有finally语句,最后都会执行finally语句的。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值