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中的代碼都是要執行的。 *
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章