Java 例外に基本的な疑問があります
つまり、すべてのチェック済み例外はExceptionclass から拡張され、未チェックの例外は から拡張されRuntimeExceptionます。しかし、ランタイム例外もから拡張されExceptionます。
しかし、なぜ伝播するのですかtry...catchブロックはチェックされているがチェックExceptionsされていない例外ではありませんか?
一般に、catch処理する特定のタイプの例外ごとに異なるブロックを追加する必要があります。チェックされた例外を(再スローすることによって)処理しようとしている場合は、どのタイプの例外を再スローするかを知っておく必要がありcatchます。ブロックを追加して、それらの各例外タイプを再スローするだけです。
最も簡単な方法は次のとおりです。
try {
//do stuff
} catch(RuntimeException e) {
throw e;
} catch(SpecificCheckedException e) {
//handle
} catch(Exception e) {
//handle
}
Exception「どうすればキャッチできRuntimeExceptionますか?」と尋ねていると思います。
あなたはおそらくそれをしようとすべきではありません。可能であれば、特定の種類の例外をキャッチする必要があります。すべてのエラーを処理する必要がある場合は、Exceptionキャッチしてすべてをキャッチする必要があります。*
catch (NullPointerException)できることがわかっている場合は、確認する必要があるため、めったにやりたくないでしょうnull。コードが原因である場合は、NullPointerExceptionコードArrayOutOfBoundsExceptionを修正して、それらがスローされないようにする必要があります。
このコードは、あなたが尋ねたことを実行する方法を示しているはずです:
public static void throwSomething(Exception throwMe)
{
try {
throw throwMe;
}
catch(Exception ex) {
// Check if the object is a RuntimeException
if(ex instanceof RuntimeException) {
// Throw the same object again.
// Cast to RuntimeException so the compiler will not
// require "throws Exception" on this method.
throw (RuntimeException) ex;
}
System.out.println("Caught an instance of a " +
ex.getClass().toString());
}
}
※実はscatch(Throwable)も含めて全てキャッチしますError。