1. 程式人生 > >CoreJava_不要在finally塊中使用return關鍵字

CoreJava_不要在finally塊中使用return關鍵字

    今天下午在提交程式碼的時候看到了CheckList中的有一條,檢查是否在finally塊中使用了return語句。畢竟好幾年了,忽然間居然忘記了,為什麼?

    趕緊動手,寫了一個DEMO,恍然大悟:

public class TestFinally {
    public int getAddResult(int x,int y){
        try{
            System.out.println("before return in try section.");
            return x+y;
        }finally{
            System.out.println("before return in finally section.");
            return x*y;
        }
    }
    public static void main(String[] args) {
        System.out.println(new TestFinally().getAddResult(10, 20));
    }
}
    上面程式的返回結果如下:
before return in try section.
before return in finally section.
200
    這才恍然大悟,原來Java的實現機制是在呼叫try程式碼塊的return之前就會去執行finally裡面的程式碼,這樣finally的return就會結束當前的方法,返回一個錯誤的值,最好的實踐還是,只有少量的資源需要釋放的時候,才去使用finally,不要一股腦的扔到finally裡面去處理,其他就扔給Java的垃圾回收機制處理好了。