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
*/

在try语句中已经有了return,理应输出的结果是:
和是:43
finally语句块

不过却不是这样的。我深入的剖析了下:

  • 当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序, 在执行时,程序仅仅是覆盖了try中的值,但不会去更新临时栈中的那个要返回的值 。执行完之后,就会通知主程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。这下应该清楚了,要返回的值是保存至临时栈中的。如果说finally中也存在return语句,而且还是对try语句中的return进行覆盖的,那么就会更新临时栈中的数据,最终以finally中return的数据为准。而catch中的return只有在程序出现异常而且被捕获的前提下才会执行。还有就是不管是否捕获异常,finally中的代码都是要执行的。 *
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章