Java try finally return 執行順序及其注意事項

在Java異常處理和return嵌套使用時,執行順序的測試

1.當在try中放置return 

代碼:

public class T2 {
    public static void main(String[] args) {
        T3 t3 = new T3();
        t3.say();

    }
}

class T3{
    public String say(){
        try{
            return say2();//先執行return 
        }finally {
            System.out.println(2);//再執行finally
            return "2";
        }
    }
    public String say2(){
        System.out.println(1);
        return "1";
    }

}

代碼執行結果

 

測試總結: 當在try塊中執行return。先執行return後面的語句再執行finally 在執行return結束程序 return和finally的執行順序:finally》return

 

2.在catch中放置return

代碼:

public class T2 {
    public static void main(String[] args) {
        T3 t3 = new T3();
        t3.say();
    }
}

class T3{
    public String say(){
        try{
            int i=1/0;
            return say("1");
        }catch (Exception e){
            e.printStackTrace();
            return say("2");
        } finally {
            return say("3");
        }
    }
    public String say(String str){
        System.out.println(str);
        return str;
    }

}

執行結果 

測試總結:先執行catch中的return 後的語句 再執行finally語句 在執行return 結束程序  執行順序 catch》finally

3.在try中拋出異常但是 不捕獲異常 向上拋出,並且在finally中執行return

代碼:

public class T2 {
    public static void main(String[] args) {
        T3 t3 = new T3();
        t3.say();
    }
}

class T3{
    public String say(){
        try{
            int i=1/0;
            return say("1");
        }finally {
            return say("3");
        }
    }
    public String say(String str){
        System.out.println(str);
        return str;
    }

}

執行結果

測試總結:在try中拋出異常但是 不捕獲異常 向上拋出,並且在finally中執行return 代碼會丟失try中的異常 當註釋 finally中的return執行結果

 

總結  finally總是在return結束程序之前執行 但是是先在return 緊跟的語句執行之後。 儘量不要在finally中寫return 因爲會導致異常無法拋出到上層。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章