8

に疑問がありException with Inheritanceます。

どうして

public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException

その後

public class IndexOutOfBoundsException extends RuntimeException

その後

public class RuntimeException extends Exception

なぜだめですか

public class ArrayIndexOutOfBoundsException extends Exception

この階層が維持される理由.. ガイダンスは役に立ちますか?

4

4 に答える 4

9

それは、ArrayIndexOutOfBoundsExceptionも であるためです。IndexOutOfBoundsExceptionRuntimeException

あなたの提案でArrayIndexOutOfBoundsExceptionは、のみになりますException

RuntimeExceptionしたがって、たとえばキャッチしたい場合は、キャッチされArrayIndexOutOfBoundsExceptionません。

于 2013-10-16T08:52:25.483 に答える
7

これは、意味のある階層を維持することを目的としており、関連する例外をグループ化するのにも役立ちます。

また、 が何であるかを知っていて、IndexOutOfBoundsException誰かがこれを拡張する別の例外をあなたに与えた場合、この事実だけからすぐに情報を収集できます。この場合、関連するオブジェクトの一部が特定の範囲内のインデックスを保持していること。

すべての例外が拡張ExceptionまたはRuntimeException(その発生をチェックする必要があるかどうか) し、その名前がやや不明瞭な場合、それが何を表しているのか手がかりがありません。

次のコードを検討してください。

try {
    for (int i = 0; i < limit; ++i) {
        myCharArray[i] = myString.charAt(i);
    }
}
catch (StringIndexOutOfBoundsException ex) {
    // Do you need to treat string indexes differently?
}
catch (ArrayIndexOutOfBoundsException ex) {
    // Perhaps you need to do something else when the problem is the array.
}
catch (IndexOutOfBoundsException ex) {
    // Or maybe they can both be treated equally.
    // Note: you'd have to remove the previous two `catch`.
}
于 2013-10-16T09:10:17.500 に答える
1

ArrayIndexOutOfBoundsExceptionサブタイプであるためですIndexOutOfBoundsException

于 2013-10-16T08:52:13.863 に答える