finally 和 return 的执行顺序

结论: 1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return语句执行之后,返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前就已经确定了; 4、finally中如果包含return,那么程序将在这里返回,而不是try或catch中的return返回,返回值就不是try或catch中保存的返回值了。

例1:

public static void main(String[] args) {
          
   
     int a = new ThreadPoolDemo().demo();
     System.out.println(a);
 }

 public int demo() {
          
   
     try {
          
   
         return 1;
     } finally {
          
   
         System.out.println("finally模块被执行");
     }
 }

运行结果如下:

finally模块被执行
1

例2:

public class PersonDemo {
          
   

    public static void main(String[] args) {
          
   
        int a = new PersonDemo().demo();
        System.out.println(a);
    }

    public int demo() {
          
   
        try {
          
   
            int a = 1 / 0;
            return 1;
        } catch (Exception e) {
          
   
            System.out.println("catch 代码块被执行");
            return 10;
        } finally {
          
   
            System.out.println("finally 模块被执行");
            return 20;
        }
    }
}

运行结果如下:

catch 代码块被执行
finally 模块被执行
20

发现只要在finally中加入return,最终这个方法的返回值只能是finally中的返回值,相当于在代码最后return。

经验分享 程序员 微信小程序 职场和发展