2016-11-19 9 views
-3

この例外をキャッチしようとすると、「例外LinkedListExceptionは決して対応するtry文の本体でスローされません」というコンパイルエラーメッセージが表示されます。これは何を意味するのでしょうか?Javaでカスタム例外を宣言する

+2

これは、 'LinkedListException'をスローするコードを呼び出さなかったことを意味します。これは、チェック例外を想定しています。 – Rogue

+0

これは 'list.nextNode(node)'がその例外をスローしないことを意味します。 –

+1

list.nextNode(node)の宣言に「LinkedListExceptionがスローされましたか? –

答えて

1
try { 
     LList.Node someNode = list.nextNode(node); 
     // We should not get here. 
     assertTrue(false); 
    } 
    catch (LinkedListException ex) { 
     // If we get here we are happy as it throw the exception 
    } 

例外はRuntimeExceptionでない場合、それは(メソッドシグネチャthrows句で)宣言されなければなりません。そのため、コンパイラは、あなたが呼び出すコードがこの例外をスローするかどうかをチェックし、catchを追加することはできません。これらは実行されません。

この例外がそのコードのどこかにスローされる可能性がある場合は、キャッチして無視するか、途中で別の例外にラップする必要があります。または、間違ったバージョンのクラスに対してコンパイルしています。

1

throwキーワードを使用してコードのどこかに例外をスローする必要があります。例えば

ArithmeticExceptionどこ深いコード内のいくつかをスローされます。あなたは

void someMethod() throws Exception 
{ 
    throw new Exception(); 
} 

のようなバブルアップこのメソッドを呼び出した人は通常我々のように、tryでそれを処理する必要がcatchfinallyすることができます(ただ、人がArithmeticExceptionを書くことについて考えたかのように)を処理したくない場合あなたの例外をスローしたい場合は、throw new LinkedListException()を追加してください。ここで例外を発生させたい場所をtryブロックに入れます。

関連する問題