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