2013-10-16 95 views
8

我有疑問Exception with Inheritance爲什麼java ArrayIndexOutOfBound異常擴展IndexOutofBound異常不是可拋出的?

爲什麼

public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException

然後

public class IndexOutOfBoundsException extends RuntimeException

然後

public class RuntimeException extends Exception

爲什麼不

public class ArrayIndexOutOfBoundsException extends Exception

爲什麼這個層次維持。任何指導,將是有幫助嗎?

回答

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

因爲ArrayIndexOutOfBoundsException亞型IndexOutOfBoundsException

9

那是因爲ArrayIndexOutOfBoundsException也是IndexOutOfBoundsExceptionRuntimeException

在你的建議中,ArrayIndexOutOfBoundsException只會是Exception

所以,如果你只想趕上RuntimeException例如,ArrayIndexOutOfBoundsException將不會被捕獲。

1

這就是繼承進入圖片的地方,並且有助於保持繼承級別的清潔和專注,並且具有可擴展性的主要目標。有柺杖是錯誤的索引不僅在陣列,但即使在字符串等HTH

相關問題