finally 与 return

finally关键字:和try块使用,通常作资源释放操做,好比关闭流、关闭数据库链接,释放锁。数据库

return:用于返回值。测试

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

test1code

finallyblog

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     }

通过测试结果为 test一、 finally、 finally behind . 同步

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

相关文章
相关标签/搜索