小瘋以前遇到一個問題,就是關於return和finally的執行順序問題,其實關於這個問題小瘋許久以前在一篇博客中看到了解答,不過因爲時間間隔找不到了,因此小瘋今天在這裏記錄一下:java
執行順序是:先try 如有異常就catch,而後finally,以後執行catch中的return,若是finally中也有return,那麼久直接出去不執行catch中的return。code
一、finally中也有return語句以下:博客
public class TryTest { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(TryTest.test()); } public static String test() { try { System.out.println("try"); throw new Exception(); } catch(Exception e) { System.out.println("catch"); return "return"; } finally { System.out.println("finally"); return "return in finally"; } } }
執行結果以下:io
tryclass
catchtest
finally異常
return in finallystatic
可見順序是先執行try中的輸出語句而後在異常處調到catch語塊,而後執行到catch中的return處沒有執行return而是跳轉到finally中執行。時間
二、finally中沒有return語句:co
public class TryTest { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(TryTest.test()); } public static String test() { try { System.out.println("try"); throw new Exception(); } catch(Exception e) { System.out.println("catch"); return "return"; } finally { System.out.println("finally"); //return "return in finally"; } } }
執行結果以下:
try
catch
finally
return
可見執行順序是先執行try中的輸出語句而後在異常處調到catch語塊,而後執行過catch的輸出語句跳轉到finally中執行以後返回到catch中的return語句。