一般に、Javaで例外を処理するには2つの方法があります。なぜRuntimeExceptionは明示的な例外処理を必要としないのですか?
- の追加は、try/catchブロックでメソッドのシグネチャで宣言
- サラウンドをスローします。
しかし、いくつかの例外、特にRuntimeException
を継承している例外には、このような明示的な例外処理は必要ありません。
たとえば、以下のようなサンプルメソッドを作成し、明示的な例外処理を必要としないメソッドに対しては「不要」とマークしました。
public void textException(){
int i = (new Random()).nextInt(100);
switch (i){
case 1:
throw new NullPointerException(); //Not required
case 2:
throw new NumberFormatException(); //Not required
case 3:
throw new RuntimeException(); //Not required
case 4:
throw new ClassNotFoundException(); //Required
case 5:
throw new IOException(); //Required
case 6:
throw new Exception(); //Required
default:
return;
}
}
私はException
からRuntimeException
継承ことに気づきました。
なぜRuntimeException
をコンパイルするために明示的にキャッチする必要はないのですが、他のExceptions
はどうしますか?
これらは、Javaでチェックされた例外と未チェックの例外と呼ばれます。そしてこれらは何度もSOの見て議論されているhttp://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –
メソッドは、そのthrows節でRuntimeExceptionの任意のサブクラスを宣言する必要はありませんメソッドの実行中にスローされる可能性がありますが、キャッチされません。 – sudmong