try 内で return にメソッドを指定した場合の finally の実行タイミング

try 内で return にメソッドを指定した場合の finally の実行タイミング

例外が投げられた時はとにかく finally 内の処理をしてくれればいいとして、
正常終了したとき、try 内で return したいときも finally を実行してくれるようなのですが、
以下のページを見てみると、「returnする前にかならずfinally句の中が実行される」と書かれていました。
しかし、例えば HTTP 通信して文字列を返すプログラムなどを書いた時、try 内で文字列を返す (return する) 前に finally 内で切断処理をされては困ります。
そこで、return にメソッドを指定した場合、そのメソッドも含めてどの順に実行されるのか確かめてみました。

// 
// Main クラス
// 
public class Main {

// 
// main メソッド
//
public static void main(String args[]) {

System.out.println(run());

}

// 
// run メソッド
// 
static String run() {

try {

System.out.println("try");

return test();

} catch (Exception e) {

throw new IllegalStateException("catch", e);

} finally {

System.out.println("finally");

}

}

// 
// test メソッド
// 
static String test() {
System.out.println("test()");
/*
String str = null;
str.toString();
/**/
return "String";
}

}

実行結果

try
test()
finally
String

test() は finally 前にちゃんと実行されていました。
確かに値を return する前に finally が実行されているのですが、return に指定したメソッドはそのさらに前に実行されるようです。
余計な心配をして、一回変数に代入して finally から抜けたあとに return する、みたいなヤヤコシイことをせずとも、簡潔に書けるみたいですね。よかったよかった。
ではまたいつか〜。
↓ブログランキング投票 (クリック) お願いします~


「try 内で return にメソッドを指定した場合の finally の実行タイミング」への2件のフィードバック

  1. Javaですね! Javaはもうほぼ何も覚えてません;_;
    finallyというのがあるのですね。returnをしようと呼び出される……
    なるほど、確かに順序がややこしいことになりますね^^;

  2. > フェルミウム湾さん
    自分はまだまだ初心者なのでわからないことがたくさんあります。。。
    一度わかってしまえば便利ですよ〜 (^^

コメントは受け付けていません。