finally的用法解析(对于try事务的提交与回滚控制)

本文探讨了在编程中事务控制与finally中return使用的注意事项。指出在finally中使用catch会导致try中的事务回滚,同时finally中的return会覆盖原有返回值,影响数据一致性。建议在finally中仅进行资源清理等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:1.try中事务执行成功,finally如果里面catch异常了,try中会回滚吗?

           2.finally中的return会对返回数据造成什么影响?

起因:最近阅读代码时发现调用第三方服务时存在事务问题,于是就测试了finally的用法,在开发中我们可以在处理业务中更好的把控事务控制和异常的捕获。

问题一:因为lz的事务控制是在执行method()时候开启,在执行完方法后才提交;所以对于finally中如果使用了catch,则会使try中事务回滚。亲测代码如下:

1.准备工作:左图是数据库的一条记录,右边是代码执行删除。如果在没有finally时,执行成功且删除。

2.但是当finally存在,且里面有try...catch...操作时,设定finally里面异常时,则第一个try中删除事务将回滚。

总结:所以使用finally执行一些业务时候,必须要慎用,且考虑好事务要怎么去控制。在哪提交。

 

问题二:finally中的return一定要慎用,会更改返回值。

1.简单的用法:不论try中是否异常给catch,返回的值都是finally决定最终结果

2.当传的是引用:不论异常与否,取得值是最终是try/catch中值加上finally拼接而成。

当我们定义finally里面也有try...catch时效果也是和上面一样

 

总结:所以在finally中使用return时,一定要注意它会改变值。所以finally一般都是建议处理一些关闭流的操作,而很少会使用return。

 

 

如果有问题,欢迎指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值