上記のトピック (タイトルを参照) に関連して、このフォーラムで既に尋ねられたすべての質問を読むことで、finally
が常に呼び出されることを完全に理解しています。System.exit
(fromおよび無限ループを除く)。return
ただし、 catch ブロックで a が呼び出されてreturn
から、finally ブロックから別のa が呼び出されるかどうかを知りたいです。
例えば:
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 句 return によって既に書き込まれている内容を最終的に上書きするという事実を見つけました。私の理解では、catch 句の戻り値が評価されようとするとすぐに、制御フローが finally 句に渡され、次に別の戻り値が返されます。今回は、制御を catch 句に戻さずに戻り値が評価されます。 . このようにしてreturn
、実行時に呼び出されるのは最終的に返されるだけです。それに同意しますか?
return
infinally
は制御をプログラムに戻しませんが、値を返し、メソッドを終了します。そう言えますか?