CoreJava_不要在finally塊中使用return關鍵字
阿新 • • 發佈:2018-12-30
今天下午在提交程式碼的時候看到了CheckList中的有一條,檢查是否在finally塊中使用了return語句。畢竟好幾年了,忽然間居然忘記了,為什麼?
before return in try section.
before return in finally section.
200
這才恍然大悟,原來Java的實現機制是在呼叫try程式碼塊的return之前就會去執行finally裡面的程式碼,這樣finally的return就會結束當前的方法,返回一個錯誤的值,最好的實踐還是,只有少量的資源需要釋放的時候,才去使用finally,不要一股腦的扔到finally裡面去處理,其他就扔給Java的垃圾回收機制處理好了。
趕緊動手,寫了一個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的垃圾回收機制處理好了。