2013-02-21 20 views
6

一般に、Javaで例外を処理するには2つの方法があります。なぜRuntimeExceptionは明示的な例外処理を必要としないのですか?

  1. の追加は、try/catchブロックでメソッドのシグネチャで宣言
  2. サラウンドをスローします。

しかし、いくつかの例外、特に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はどうしますか?

+3

これらは、Javaでチェックされた例外と未チェックの例外と呼ばれます。そしてこれらは何度もSOの見て議論されているhttp://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –

+0

メソッドは、そのthrows節でRuntimeExceptionの任意のサブクラスを宣言する必要はありませんメソッドの実行中にスローされる可能性がありますが、キャッチされません。 – sudmong

答えて

1

Javaの場合、RuntimeExceptionはシステム例外とみなされますが、一般的には回復不可能なので、メソッドにthrows宣言を追加するか、try catchブロックを使用して処理する必要はありません。 ただし、例外はアプリケーション例外と見なされ、回復可能です。

関連する問題