會在return中間執行!
try 中的 return 語句調用的函數先於 finally 中調用的函數執行,也就是說 return 語句先執行,finally 語句后執行,但 return 並不是讓函數馬上返回,而是 return 語句執行后,將把返回結果放置進函數棧中,此時函數並不是馬上返回,它要執行 finally 語句后才真正開始返回!但此時會出現兩種情況:
①、如果finally中也有return,則會直接返回並終止程序,函數棧中的return不會被完成!;
②、如果finally中沒有return,則在執行完finally中的代碼之后,會將函數棧中的try中的return的內容返回並終止程序;
catch同try;
package com.test; public class Test1 { public static void main(String[] args) { try { System.out.println(new Test1().testname()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String testname() throws Exception { String t = ""; try { t = "try"; System.out.println("try"); return t; } catch (Exception e) { // result = "catch"; t = "catch"; return t; } finally { System.out.println("finally"); // return t = "finally"; } } }
打印結果如下: try finally try
將finally中的注釋放開,打印結果如下:
try finally finally
結論:finally中的代碼肯定會執行,但是會先執行try中的代碼,如果try中有return,那么return的東西會先放到函數棧中,然后再執行finally中的代碼,
①、如果finally中也有return,則會直接返回並終止程序,函數棧中的return不會被完成!;
②、如果finally中沒有return,則在執行完finally中的代碼之后,會將函數棧中的try中的return的內容返回並終止程序;
catch同try;
啰嗦了!
