finally 与 return

finally关键字:和try块使用,一般做资源释放操作,比如关闭流、关闭数据库连接,释放锁。

return:用于返回值。

finally块可保证一定执行,当逻辑处理有返回值时,会首先执行finally再执行return返回值。看这个规律我们可以推断如下代码的执行顺序为:

test1

finally

复制代码
1     public static int test1(){
2         int i = 0;
3         try{
4             System.out.println("test1"); //1
5             return i;
6         }finally {
7             System.out.println("finally"); //2
8         }
9     }
复制代码

再看如下代码执行顺序是怎样的

复制代码
 1   public static int test1(){
 2         int i = 0;
 3         try{
 4             System.out.println("test1"); //1
 5         }finally {
 6             System.out.println("finally"); //2
 7         }
 8         System.out.println("finally behind"); //3
 9         return i;
10     }
复制代码

经过测试结果为 test1、 finally、 finally behind . 

在测试该段代码之前根据我之前了解的判断执行顺序应该是132,这是错误的。所以我们需要注意这种写法的执行顺序。正确的结果是123。这一点在使用同步代码的时候一定要注意 。主要在finally中使用lock.unlock方法时,return要写在try中,避免return前已经释放锁,将数据暴露给了其它任务。

posted @   blacksonny  阅读(1134)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示