上記のトピック(タイトルを参照)に関連するこのフォーラムですでに質問されているすべての質問を読んで、finally
が常に呼び出されることを徹底的に理解します。 (System.exit
と無限ループを除く)。しかし、return
がキャッチブロックで呼び出され、次にreturn
がfinallyブロックから呼び出されたかどうかを知りたいと思います。例えばtry-catch-finally-return clarification
:
public static void main(String[]args) {
int a = new TestClass().absorbeTheValue();
}
int absorbeTheValue() {
try {
int a = 10/0;
if (a > 0) return 4;
} catch(Exception e) {
return 45;
} finally {
return 34;
}
}
だからここで(メソッドが呼び出される)出力は、いずれの場合に34になるだろう。それは最終的に常に実行されることを意味します。他の「返品」は一切実行されていませんが、私は思っています。多くの記事で、私は最後に、catch節の復帰によって既に書かれた内容を上書きするという事実を発見しました。私の理解では、catch節の戻り値が評価されるとすぐに、制御フローはfinally節に渡され、今度は別の戻り値を返します。今回は、制御をcatch節に戻さずに戻り値が評価されます。このように、実行時に呼び出されるのはreturn
だけです。それに同意しますか?
は、コントロールをプログラムに戻しませんが、値を返して終了します。私達はそう言うことができますか?
インデントあなたのコードください。 –
も参照してください:http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –
あなたの質問は何ですか? – thiagoh