先看一段代碼:java
這個是方法類:函數
//方法類 public class test11 { public int test1(){ int x=1; try{ return x; //返回x }catch(Exception e){ return 9999;//隨便返回,不寫報錯 }finally{ ++x;//x自加 } } }
測試類:測試
public class Mytest { public static void main(String[] args) { System.out.println(new test11().test1()); } }
-----------------控制檯輸出:------------------spa
這段代碼能說出,最起碼 finally 是在 return 以後才進行的,不然 ++i 就會變成2。code
可是這麼說又不徹底準確,或者說細節沒有考慮周全。io
請看下面一段代碼:class
方法代碼:test
public class test11 { //壓制警告的註解,不寫的話, finally 就會有黃線警告。 @SuppressWarnings("finally") public int test1(){ int x=1; try{ return x; }catch(Exception e){ return 9999; }finally{ return ++x; } } }
測試代碼不變:方法
---------------------控制檯輸出:---------------------im
這個例子告訴咱們,嚴禁的說,實際上是在return 以後(並無出這個方法函數),finally 進行一個 return覆蓋了前者。
try 中的 return 語句調用的函數先於 finally 中調用的函數執行,也就是說 return 語句先執行,
finally 語句後執行,因此,返回的結果是2。return 並非讓函數立刻返回,而是 return 語
句執行後,將把返回結果放置進函數棧中,此時函數並非立刻返回,它要執行 finally 語 句後才真正開始返回。