throw new Exception()
とnew Exception()
を使用するためのベストプラクティスを知りたいです。 new Exception()
を使用する場合、例外をスローするのではなく、コードが次のステートメントに移動することを確認しました。
しかし、RuntimeException
をスローするには、new Exception()
を使用する必要があると言われています。
誰かがこれにいくつかの光を投げることができますか?
new Exception()
はインスタンスを作成する(新しいInteger(...)を作成するのと同じ)ことを意味しますが、スローするまで例外は発生しません...
次のスニペットを検討してください:
public static void main(String[] args) throws Exception {
foo(1);
foo2(1);
}
private static void foo2(final int number) throws Exception {
Exception ex;
if (number < 0) {
ex = new Exception("No negative number please!");
// throw ex; //nothing happens until you throw it
}
}
private static void foo(final int number) throws Exception {
if (number < 0) {
throw new Exception("No negative number please!");
}
}
パラメータが負の場合、メソッドfoo()は例外をスローしますが、パラメータが負の場合、メソッドfoo2()は例外のインスタンスを作成します
Exception e = new Exception ();
後でスローできる新しい例外を作成するだけです。使用する
throw e;
一方
throw new Exception()
例外を1行で作成してスローします
ランタイム例外を作成してスローするには
throw new RuntimeException()
new Exception()
は、例外タイプの新しいインスタンスを作成していることを意味します。つまり、new String("abc")
のような他のオブジェクトに似たオブジェクトをインスタンス化しているだけです。これは、コード実行の次の数行でException
型の例外をスローしようとしているときに行います。
throw new Exception()
と言うときは、プログラムコントロールを呼び出し元に移動し、このthrowステートメントの後にそれ以上のステートメントを実行しないことを意味します。
これを行うには、先に進んでさらに実行する方法がないことがわかったため、このケースを処理できないことを発信者に知らせます。このケースの処理方法を知っている場合は、そうしてください。
オレンジとリンゴを比較するようなベストプラクティスはありません。ただし、例外をスローするときは、IOのように常に意味のある例外をスローすることに注意してください。ファイルが存在しない場合、親FileNotFoundException
ではなくIOException
をスローします。