この奇妙な振る舞いは、デバッグ中だけでなく、通常の実行中も見つかりました(少なくとも、アプリケーションの動作に基づいて想像します)。
次のコードを使用する場合(intを返す関数で):
try {
return Integer.parseInt("3");
} catch (NumberFormatException ex) {
System.out.println(ex.getMessage());
return 0;
}
デバッグ中、'return Integer.parseInt( "3");'の後 デバッガーは「return0;」にジャンプします。それはcatchブロックに入っているようですが、System.out行をスキップし、既存の変数として「ex」を表示しません。次に、関数は0を返します。
しかし、上記を次のように置き換えると:
int x;
try {
x = Integer.parseInt("3");
} catch (NumberFormatException ex) {
System.out.println(ex.getMessage());
x = 0;
}
return x;
次に、すべてが期待どおりに動作します。xは3の値を取得し、3は関数によって返されます。
私にとっては、なぜこれが起こるのか理解できません。何か考えはありますか?