finally{} は非常に便利で、例外発生時だけではなく return 時にも必ず実行されます。しかし、System#exit()にはさすがに勝てません。
こんな三つのメソッドを作って、
static void returnMeth(){ try{ System.out.println("(returnMeth) try."); return; }finally{ System.out.println("(returnMeth) finally."); } } static void throwMeth(){ try{ System.out.println("(throwMeth) try."); throw new RuntimeException(""); }finally{ System.out.println("(throwMeth) finally."); } } static void exitMeth(){ try{ System.out.println("(exitMeth) try."); System.exit(0); }finally{ System.out.println("(exitMeth) finally."); } }
呼び出してみるとこんな結果でした。
try{ throwMeth(); }catch(RuntimeException re){ /*NOP*/ } returnMeth(); exitMeth(); 【結果】 (throwMeth) try. (throwMeth) finally. (returnMeth) try. (returnMeth) finally. (exitMeth) try.