一個try塊可以不執行finally子句就能夠退出的唯一方法是通過調用System.exit()方法來實現的。
如果控制因為一個return,continue或break語句離開這個try塊,那么finally快會在控制轉移到它的新的目標代碼之前執行.
也就是說如果在finally塊中使用return,continue或break。邏輯可能就不是你本身要表達的意思了。
package?test;
public?class?TryTest?{
????public?static?void?main(String[]?args)?{
????????try?{
????????????System.out.println(TryTest.test());//?返回結果為true其沒有任何異常
????????}?catch?(Exception?e)?{
????????????System.out.println("Exception?from?main");
????????????e.printStackTrace();
????????}
????}
????public?static?boolean?test()?throws?Exception?{
????????try?{
????????????throw?new?Exception("Something?error");//?1.拋出異常
????????}?catch?(Exception?e)?{//?2.捕獲的異常匹配(聲明類或其父類),進入控制塊
????????????System.out.println("Exception?from?e");//?3.打印
????????????return?false;//?4.?return前控制轉移到finally塊,執行完后再返回
????????}?finally?{
????????????return?true;?//?5.?控制轉移,直接返回,吃掉了異常
????????}
????}
}