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.