2011-06-13 17 views
2

しかし、次のプログラムでは、throws節のないcatch文で例外が再スローされると、エラーはありません?? どのようにですか?Javaでは、私たちによってスローされた例外はデフォルトのハンドラで捕捉されませんか?右

Class Throwdemo { 
    static void demoproc(){ 
    try{ 
     throw new NullPoinerException ("demo"); 
    }catch(NullPointerException e) { 
     System.out.println("Caught inside demoproc."); 
     throw e; 
    } 
    } 
    public static void main(String Args[]){ 
    try[ 
     demoproc(); 
    }catch(NullPointerException e) { 
      System.out.println("Recaught : " + e); 
    } 
} 
} 

出力はは例外を確認するためにあなたが唯一throws句が必要

Caught inside demoproc. 
Recaught : java.lang.NullPointerException: demo 
+0

期待どおりの出力が得られます。あなたの質問は何ですか? – Thilo

+1

@Thilo、@Luzhin:OPは 'demoproc()'メソッドに 'throws 'を追加する必要がない理由を言いたいかもしれません。 [私の知る限り] –

+0

つまり、メソッドが単独で例外を処理できない場合、Exceptionサブクラスはthrows句に含まれなければならないが、例外がスローされるとcatchするためのcatch文はないそれは同じ方法で? –

答えて

5

です。

+0

I:メソッドシグネチャでRuntimeExceptions(NullPointerExceptionsなど)を宣言する必要はありません(ただし、必要に応じて実行できます)。 – Thilo

+0

ええ、それは愚かな間違いの感謝の男を得た –

3

これらの線を観察:

public static void main(String Args[]){ 
    try[ 

tryブラケットなく、ブレースを有します。おそらく、プログラムのコンパイルに失敗し、古いクラスファイルを再実行している可能性があります。

+0

申し訳ありませんが、私のエラーだった –

0

あなたがデフォルトハンドラとなるものを手に入れることができません。実行がスローされたとき

throw new NullPoinerException ("demo"); 

これは、それを取り囲むtry catchブロックで捕捉されます。

catchブロックは、例外をスローします。これは、mainのtry catchブロックによって捕捉されます。

これが役に立ちます。

あなたのコメントの後に編集:NullPoinerException例外もチェックされていない例外は、スローとして言及する必要はありません。

2

NullPoinerExceptionRuntimeExceptionです。 throws句は必要ありません。

関連する問題