为什么java ArrayIndexOutOfBound Exception扩展IndexOutofBound异常不能抛出?

时间:2013-10-16 08:47:24

标签: java exception inheritance

我怀疑Exception with Inheritance

为什么

public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException

然后

public class IndexOutOfBoundsException extends RuntimeException

然后

public class RuntimeException extends Exception

为什么不

public class ArrayIndexOutOfBoundsException extends Exception

为什么要维护此层次结构..任何指导都会有所帮助?

4 个答案:

答案 0 :(得分:9)

那是因为ArrayIndexOutOfBoundsException也是IndexOutOfBoundsExceptionRuntimeException

在您的建议中,ArrayIndexOutOfBoundsException只会是Exception

因此,如果您只想抓住RuntimeException,则不会抓住ArrayIndexOutOfBoundsException

答案 1 :(得分:7)

这是为了保持一个有意义的层次结构,并且还用于对相关的例外进行分组。

此外,如果您知道IndexOutOfBoundsException是什么,并且有人给您另外一个例外,那么您可以立即从这个事实中收集信息。在这种情况下,某些涉及的对象将索引保持在一定范围内。

如果每个异常都延长ExceptionRuntimeException(无论是否应该检查或未检查),并且其名称有些模糊,那么您就不知道它可能代表什么

请考虑以下代码。

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`.
}

答案 2 :(得分:1)

因为ArrayIndexOutOfBoundsExceptionIndexOutOfBoundsException子类型

答案 3 :(得分:1)

这就是继承的结果,有助于保持继承级别的清晰和集中,主要目标是可扩展性。不仅在数组中存在错误的索引,甚至在字符串等中也有错误.HPH