我怀疑Exception with Inheritance
。
为什么
public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
然后
public class IndexOutOfBoundsException extends RuntimeException
然后
public class RuntimeException extends Exception
为什么不
public class ArrayIndexOutOfBoundsException extends Exception
为什么要维护此层次结构..任何指导都会有所帮助?
答案 0 :(得分:9)
那是因为ArrayIndexOutOfBoundsException
也是IndexOutOfBoundsException
和RuntimeException
。
在您的建议中,ArrayIndexOutOfBoundsException
只会是Exception
。
因此,如果您只想抓住RuntimeException
,则不会抓住ArrayIndexOutOfBoundsException
。
答案 1 :(得分: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`.
}
答案 2 :(得分:1)
因为ArrayIndexOutOfBoundsException
是IndexOutOfBoundsException
的子类型。
答案 3 :(得分:1)
这就是继承的结果,有助于保持继承级别的清晰和集中,主要目标是可扩展性。不仅在数组中存在错误的索引,甚至在字符串等中也有错误.HPH