至少有兩種狀況下finally語句是不會被執行的:code
(1)try語句沒有被執行到,如在try語句以前就返回了,這樣finally語句就不會執行,這也說明了finally語句被執行的必要而非充分條件是:相應的try語句必定被執行到。虛擬機
(2)在try塊中有System.exit(0);這樣的語句,System.exit(0);是終止Java虛擬機JVM的,連JVM都中止了,全部都結束了,固然finally語句也不會被執行到。it
public String test() { try { Object obj = null; if(obj.equals("123")){ System.out.println("123"); } return "try block"; } catch (Exception e) { return "catch block"; } finally { System.out.println("d"); //return "finally block"; } }
如上代碼:io
先執行finally代碼塊,而後返回try或catch的return值。test
注:方法
不能在finally塊中使用return,finally塊中的return返回後方法結束執行,不會再執行try或catch塊中的return語句。co