北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

finally{}とSystem#exit()

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.