catch中有return語句,finally中的語句會執行嗎?
阿新 • • 發佈:2019-01-12
public class Test1 { public static void main(String[] args) { Demo d =new Demo(); System.out.println(d.method()); } } class Demo{ public int method() { int x=10; try { x=20; System.out.println(1/0); //出現異常 return x; }catch(Exception e) { x=30; return x; } finally { x=40; System.out.println("執行了嗎"); // return x; } } }
上述程式碼執行的結果是:
執行了嗎
30
從結果可以看出,finally中程式碼被執行了,但是為什麼返回30,而不是返回40?
當程式執行到try中輸出語句,會產生異常,被catch捕捉到,x=30執行,在執行return時,return 先建立好一個返回路徑,把x=30打包好,然後執行finally中的程式碼,x=40被執行了,但是return的返回路徑已確定,所以不會返回40,finally中的程式碼主要是釋放資源,執行x=40這種程式碼沒有意義,在執行玩finally程式碼後,最後按照return的返回路徑返回。
如果在finally中寫上return,會覆蓋掉之前在catch中的返回路徑,直接返回40,但是這樣寫前邊try和catch就沒有任何意義了,程式最終就會返回finally中return,所以這種寫法是錯誤的。