より具体的な例外のどれを使用すべきかをあまり考えずに、Javaで汎用例外を発生させる最良の方法は何ですか?私は考えている(しかし、これが最善であるかどうかは分からない):
throw new RuntimeException("Something went wrong");
回答:
回答№1は1それはどのような種類の例外であるかに少し依存します。 Javaでは、これはJavaに関して最も批判的なことの1つであると付け加えておきます。チェックされている例外とチェックされていない例外があります。
- チェックされた例外(
java.lang.Excetption
、からではなくjava.lang.RuntimeException
)は、リソースや操作に何か問題が生じた場合にスローされます。これは多かれ少なかろうと予想されます。ファイルが見つからず、ネットワークリンクがダウンしたなど - チェックされていない例外(
java.lang.RuntimeException
)は、ほとんどの場合、言語やライブラリによってスローされ、コードにバグがあるためにスローされます
再び、加熱された状態になるのは非常に簡単ですこれについての議論は、あなたの質問の範囲を超えています。 C#の背後にいる人はJavaを見て、 "私はそれを持っていることにはなりません"とチェックした例外をすべて取り除いた。
しかし、これはJavaであるため、例外。したがって、Javaが設計されたやり方をしたい場合は、間違ったことの種類に基づいてチェック済みまたは未チェックの例外をスローする必要があります。
すべてのことを言っているが、プログラマはチェックされていない例外をますます使用しています。これは、主にチェック例外は、あなたが知っているものの痛みであり、意味のある例外処理は言語を設計するときと同じくらい現実的には明確ではないからです。
回答№2の場合は0
はい、あなたは正しい、これは世界にできる:
throw new RuntimeException("error message");
もう少し具体的な例外を行うこともできます
throw new IllegalArgumentException("error message");
throw new IllegalStateException("error message");
throw new UnsupportedOperationException("error message");
回答№3の場合は0
新しいRuntimeExceptionをスローする( "message"); //メソッドシグネチャでこれを宣言する必要はありません。
void doSomething1() {
throw new RuntimeException("");
}
新しい例外( "message")を投げる; //メソッドシグネチャでこれを宣言しなければなりません。次のように:
void doSomething2() throws Exception{
throw new Exception("");
}
回答№4の場合は0
Javaにはさまざまな種類の例外があります。 Throwable
, Error
, Exception
そして RuntimeException
。 SonarQubeによると(イカ:S1181)、 Throwable
Javaのすべてのエラーと例外のスーパークラスです。 Error
アプリケーションによって検出されないようにするすべてのエラーのスーパークラスです。したがって、チェックされた例外 Exception
またはチェックされていない例外(別名ランタイム例外) RuntimeException
.
より具体的な例外のどれを使用すべきかをあまり考えずに、Javaで汎用例外を発生させる最良の方法は何ですか?
あなたが言ったように、あなたはランタイム例外をスローすることができます。私は個人的にはより意味のある例外タイプを好みますが、それはあなた次第です。 Javaで最も一般的に使用される例外、 といった:
IllegalStateException
IllegalArgumentException
参照: Java言語仕様、§11。例外