有意思的try catch finally

今天看到一個題,不在電腦執行真的挺難想出結果的,當然如果知道原理的話還是很容易出結果的。下面通過代碼分享給大家。

package com.yxc;

public class TestApp {
    public static void main(String[] args) {
        int a=test();
        int b=test2();
        System.out.println(a);
        System.out.println(b);
    }
    public static int test(){

        int a=1;
        try{
            //運行時異常
            a=a/0;
            //下面的代碼不會被執行
            a=2;
        }catch (Exception e){
           a=3;
           return a;

        }finally {
           a=4;
        }
        return a;
    }
    public static int test2(){

        int a=1;
        try{
            //運行時異常
            a=a/0;
            //下面的代碼不會被執行
            a=2;
        }catch (Exception e){
            a=3;
            return a;
        }finally {
            a=4;
            //這裏在finally裏面return
            return a;
        }

    }

}

結果是:
3
4
首先可以確定的是如果在catch中有return語句的話,那麼finally裏面的代碼還是會繼續執行的,第一種情況下,執行到catch時返回3,這時它發現finally裏面還有代碼需要執行,所以就去執行,a=4,但是這個時候它會返回之前返回路徑,也就是return a=3;而finally後面的return 根本不會執行
第二種情況,同樣執行到catch,發現finally裏面有代碼要執行,所以進入finally,在finally裏面有return 語句,這時候直接return 值,所以返回的是4

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