JAVA中try,catch,finally的return研究 – JAVA編程語言程序開發技術文章

最近在壇子裡看到有人問相關問題。

自己發現自己第一時間打錯瞭。

所以又重新驗證瞭一下。

先上結論給伸手黨。

 

1.finally塊和最外層有且隻能有一個return,否則出編譯期錯誤。(catch塊不影響此結論)

—-try塊和最外層有且隻能有一個return,否則出編譯期錯誤。(try塊有時,catch塊也必須有return)

—-return可以不寫在外層而寫在finally裡,但是會報警告(標黃)。(try塊,catch塊不影響此結論)

 

2.finally有return時,不管有沒有異常,都會從finally的return跑掉

—-try塊有return。沒有異常(不進入catch塊)時,finally塊有return走finally,否則走try的return。

——–外層有也不走,其實是運行到try的return時,執行finally在返回try的return,但是finally也有return,所以相當於半路跑路瞭

—-try塊有return。有異常(進入catch塊)時,finally塊有return走finally,否則走catch的return。

——–解釋同上,到finally時半路跑路瞭。

 

驗證代碼:

[java] 
/**
 * JAVA中try,catch,finally的return研究
 * @author qian.xu
 *
 */ 
public class MyReturn { 
 
     
    public String test(){ 
        int[] a = new int[2]; 
        try{ 
            //for(int i=0;i<2;i++){       //正常系 
            for(int i=0;i<3;i++){     //異常系 
                //執行到i=2會報錯 
                a[i] = i; 
            } 
            System.out.println("try塊執行完畢"); 
            //return "我是try塊的return"; 
        }catch(Exception e){ 
            System.out.println("catch塊被執行"); 
            return "我是catch塊的return"; 
        }finally{ 
            System.out.println("finally塊被執行"); 
            return "我是finally塊的return"; 
        } 
        //return "我是最後一個return"; 
    } 
     
     
     
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        MyReturn myReturn = new MyReturn(); 
        System.out.println(myReturn.test()); 
    } 
 

發佈留言