finally 與 return

finally關鍵字:和try塊使用,通常作資源釋放操做,好比關閉流、關閉數據庫鏈接,釋放鎖。數據庫

return:用於返回值。測試

finally塊可保證必定執行,當邏輯處理有返回值時,會首先執行finally再執行return返回值。看這個規律咱們能夠推斷以下代碼的執行順序爲:spa

test1code

finallyblog

1     public static int test1(){
2         int i = 0;
3         try{
4             System.out.println("test1"); //1
5             return i;
6         }finally {
7             System.out.println("finally"); //2
8         }
9     }

再看以下代碼執行順序是怎樣的資源

 1   public static int test1(){
 2         int i = 0;
 3         try{
 4             System.out.println("test1"); //1
 5         }finally {
 6             System.out.println("finally"); //2
 7         }
 8         System.out.println("finally behind"); //3
 9         return i;
10     }

通過測試結果爲 test一、 finally、 finally behind . 同步

在測試該段代碼以前根據我以前瞭解的判斷執行順序應該是132,這是錯誤的。因此咱們須要注意這種寫法的執行順序。正確的結果是123。這一點在使用同步代碼的時候必定要注意 。主要在finally中使用lock.unlock方法時,return要寫在try中,避免return前已經釋放鎖,將數據暴露給了其它任務。class

相關文章
相關標籤/搜索