web-dev-qa-db-ja.com

Java:例外をスローするとメソッドが強制終了しますか?

例えば:

public String showMsg(String msg) throws Exception {
    if(msg == null) {
        throw new Exception("Message is null");
    }
    //Create message anyways and return it
    return "DEFAULT MESSAGE";
}

String msg = null;
try {
    msg = showMsg(null);
} catch (Exception e) {
    //I just want to ignore this right now.
}
System.out.println(msg); //Will this equal DEFAULT MESSAGE or null?

特定のケースでは例外を本質的に無視する必要があります(通常、メソッドから複数の例外がスローされる可能性があり、特定のケースでは問題にならない場合)。またはスローは実際にメソッドを返しますか?

34
ryandlf

returnステートメントは、例外がスローされるとnot実行されます。例外をスローすると、プログラムの制御フローはすぐに例外のハンドラー(*)に移動し、途中で他のものをスキップします。したがって、msgによって例外がスローされた場合、特にnullはprintステートメントでshowMsgになります。

(*)finallyブロック内のステートメントが実行されることを除きますが、実際にはここでは関係ありません。

60
jacobm