JavaマスターJavaプログラムサンプル集例外のサンプル → ArrayIndexOutOfBoundsException対策

ArrayIndexOutOfBoundsException対策

ArrayIndexOutOfBoundsExceptionがなぜ発生するのかと、どのように 回避すればよいかを解説します。

ArrayIndexOutOfBoundsExceptionは、配列として確保された領域を 超えた場所アクセスした場合に発生します。

samples/exception/index/ArrayIndexOutOfBoundsExceptionTest.java - Eclipse SDK
package samples.exception.index;

public class ArrayIndexOutOfBoundsExceptionTest {
  public static void main(String[] args) {
    int[] intArray = 12};
    try {
      System.out.println(intArray[0]);
      System.out.println(intArray[1]);
      System.out.println(intArray[2]);
      System.out.println(intArray[3]);
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

上記の例では、intArrayという変数に3つの要素を持つ配列を作成しています。 Java言語では、配列の添え字は0から始まるため、この場合は [0], [1], [2] の3つだけが、有効な添え字となります。

ここでは、わざと、存在しない 4番目(intArray[3])にアクセスして、 ArrayIndexOutOfBoundsExceptionが発生することを確認しています。

コマンド プロンプト

C:\JavaMaster\bin>java -cp . samples.exception.index.ArrayIndexOutOfBoundsExceptionTest 
1
2
3
java.lang.ArrayIndexOutOfBoundsException: 3
    at samples.exception.index.ArrayIndexOutOfBoundsExceptionTest.main(ArrayIndexOutOfBoundsExceptionTest.java:10)

通常は、配列のすべての内容に頭から順番にアクセスするには、 次のようにコーディングします。

samples/exception/index/ArrayIndexOutOfBoundsExceptionTest2.java - Eclipse SDK
package samples.exception.index;

public class ArrayIndexOutOfBoundsExceptionTest2 {
  public static void main(String[] args) {
    int[] intArray = 12};
    for (int i = 0; i < intArray.length; i++) {
      System.out.println(intArray[i]);
    }
  }
}
コマンド プロンプト

C:\JavaMaster\bin>java -cp . samples.exception.index.ArrayIndexOutOfBoundsExceptionTest2 
1
2
3