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 する、みたいなヤヤコシイことをせずとも、簡潔に書けるみたいですね。よかったよかった。
ではまたいつか〜。
↓ブログランキング投票 (クリック) お願いします~
Javaですね! Javaはもうほぼ何も覚えてません;_;
finallyというのがあるのですね。returnをしようと呼び出される……
なるほど、確かに順序がややこしいことになりますね^^;
> フェルミウム湾さん
自分はまだまだ初心者なのでわからないことがたくさんあります。。。
一度わかってしまえば便利ですよ〜 (^^