public class SystemExitAndFinally { public static void main(String[] args) { try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } } }
執行結果截圖:
原因:
在Java語言的異常處理中,finally塊的作用就是為了保證無論出現什么情況,finally塊里的代碼一定會被執行。由於程序執行return就意味着結束對當前函數的調用並跳出這個函數體,因此任何語句要執行都只能在return前執行(除非碰到exit函數),因此finally塊里的代碼也是在return之前執行的。此外,如果try-finally或者catch-finally中都有return,那么finally塊中的return將會覆蓋別處的return語句,最終返回到調用者那里的是finally中return的值。
注:當遇到exit時,會直接退出程序,不會執行下邊的finally中的語句。