Java中的try...catch...finally中的return语句的执行

public class Test{ 

    public int add(int a,int b){   
         try {
             return a+b;      
         } 
        catch (Exception e) {  
            System.out.println("catch语句块");
         }
         finally{ 
             System.out.println("finally语句块");
         }
         return 0;
    } 
     public static void main(String argv[]){ 
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

输出:finally语句块

     和是:43

 

代码执行过程:  System.out.println("和是:"+test.add(9, 34));
                这是进行字符串拼接一个整体,所以首先是进入add方法中,进去之后先把先不运算result,而是输出finally块。
 
注:此时finally块输出结果是:finally语句块,这句话首先打印到控制台中。
  打印完后返回来执行try中的return得到43,所以此时再将结果与"和是:"进行拼接-->输出:和是 43。
  所以此时控制台又多了一句话:和是 43。
  加上之前finally先在控制台上的输出,所以结果为:finally语句块
                             和是 43
public abstract class Test {
    public static void main(String[] args) {
        System.out.println(beforeFinally());
    }
    public static int beforeFinally(){
        int a = 0;
        try{
            a = 1;
            return a;
        }finally{
            a = 2;
        }
    }
}

输出:1

代码执行过程:

      当程序执行到try{}语句中的return方法时,首先它会将要返回的结果存储到一个临时栈中;

      然后程序不会立即返回,而是去执行finally{}中的程序, 在执行 a = 2 时,程序仅仅是覆

      盖了a的值,不会更新临时栈中的那个要返回的值 ;最后,执行完之后,就会通知主

      程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。

注:要返回的值是保存至临时栈中的。

public abstract class Test {
    public static void main(String[] args) {
        System.out.println(beforeFinally());
    }
    public static int beforeFinally(){
        int a = 0;
        try{
            a = 1;
            return a;
        }finally{
            a = 2;
            return a;
        }
    }
}
输出:2
 
代码执行过程:finally{}里也有一个return,那么在执行这个return时,就会更新临时栈中的值
       在执行完finally之后,就会通知主程序请求返回了,即将临时栈中的值取出来
       返回。故返回值是2.

 

posted @ 2020-11-05 16:43  静心Q  阅读(232)  评论(0)    收藏  举报