#疑問点
ArrayIndexOutOfBoundsExceptionとIndexOutOfBoundsExceptionの違いについてお教えいただきたいです。
現在、Java Silverの勉強をしています。
黒本・11章14問目に、下記のコードを実行した時に発生する例外は何か、という問題がありました。
java
1 2import java.util.ArrayList; 3import java.util.List; 4 5public class Main{ 6 public static void main(String[] args){ 7 List<String> list = new ArrayList<>(); 8 list.get(0); 9 } 10} 11
ここで発生する例外は「IndexOutOfBoundsException」です。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
ここまでは理解できるのですが、選択肢にあった「ArrayIndexOutOfBoundsException」と「IndexOutOfBoundsException」の違いがいまいちわかりません。
存在しない要素を取り出そうとすると、「IndexOutOfBoundsException」が発生します。
「ArrayIndexOutOfBoundsException」は配列の要素外アクセスを示す例外クラスです。
と解説には書かれているのですが、どちらも意味的には同じことを言っているように感じられます。
#考えたこと
Javaの公式ドキュメントに書かれているIndexOutOfBoundsExceptionとArrayIndexOutOfBoundsExceptionの解説を確認しました。
ここから確認できるのは、IndexOutOfBoundsExceptionは、ある種のインデックス (配列、文字列、ベクトルなど) が範囲外であることを示すためにスローされる例外で、ArrayIndexOutOfBoundsExceptionのスーパークラスとなっています。
ArrayIndexOutOfBoundsExceptionは、負または、配列のサイズ以上のインデックス番号で配列にアクセスした時に発生する例外ということです。
java
1import java.util.ArrayList; 2import java.util.List; 3 4public class Main{ 5 public static void main(String[] args){ 6 List<String> list = new ArrayList<>(); 7 list.get(1); 8 list.get(-1); 9 } 10} 11
実行するコードを変更し、要素数0の配列にインデックス番号1やインデックス番号-1でアクセスしようとしても、やはり
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 0
という例外が発生します。
ということは、ArrayIndexOutOfBoundsExceptionに該当する操作を行ったとしても、例外として発生するのはスーパークラス
であるIndexOutOfBoundsExceptionである、と理解するのが正しいのでしょうか?
また、ArrayIndexOutOfBoundsException例外が実際に発生するようなコードがあるのならば、それはどのようなコードになるのでしょうか。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/03 15:10