JavaのArrayIndexOutOfBoundsExceptionとは?発生原因と対処法を解説
配列とインデックスの基本
配列(Array)とは、同じ型の要素を固定サイズで順番に格納するためのデータ構造(コンテナ/オブジェクト)です。配列のサイズ(長さ)は生成時に決定され、後から変更することはできません。
配列内の各要素の位置は「インデックス(添字)」と呼ばれます。Javaの配列は0始まりのため、最初の要素はインデックス0、2番目の要素はインデックス1、というように順に番号が割り当てられます。

配列の各要素へは、「配列名[インデックス]」という形式の式を使ってアクセスします。
System.out.println(myArray[3]); // 1457 が出力される
たとえばサイズ7の配列を作成した場合、その要素にアクセスできる有効なインデックスは a[0]〜a[6](長さ-1)までです。
ArrayIndexOutOfBoundsExceptionとは
ArrayIndexOutOfBoundsExceptionは、配列に存在しないインデックスでアクセスしようとした際にスローされる実行時例外(java.lang.RuntimeException のサブクラス)です。主に以下のようなケースで発生します。
- 負の値(例:-1)をインデックスに指定した場合
- 配列のサイズ以上の値(サイズが7の場合は7以上)をインデックスに指定した場合
例外の発生例
次のコードは、配列の要素一覧を表示した後、ユーザーにインデックスの入力を求め、その位置にある要素を出力するプログラムです。配列のサイズは7なので、有効なインデックスは0〜6です。
import java.util.Arrays;
import java.util.Scanner;
public class AIOBSample {
public static void main(String args[]){
int[] myArray = {1254, 1458, 5687, 1457, 4554, 5445, 7524};
System.out.println("配列の要素は以下の通りです:");
System.out.println(Arrays.toString(myArray));
Scanner sc = new Scanner(System.in);
System.out.println("取得したい要素のインデックスを入力してください:");
int element = sc.nextInt();
System.out.println("指定されたインデックスの要素は :: " + myArray[element]);
}
}
しかし、下記の実行例ではインデックスとして7を入力しています。サイズ7の配列で有効なのは0〜6までなので、7は無効なインデックスとなり、ArrayIndexOutOfBoundsExceptionが発生してプログラムが異常終了します。
実行結果
実行時例外:
配列の要素は以下の通りです: [1254, 1458, 5687, 1457, 4554, 5445, 7524] 取得したい要素のインデックスを入力してください: 7 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at AIOBSample.main(AIOBSample.java:12)
例外への対処法・回避策
1. インデックスの範囲を事前にチェックする
最も基本的な対策は、配列にアクセスする前に、インデックスが有効範囲内(0以上・length未満)であるかを確認することです。
if (element >= 0 && element < myArray.length) {
System.out.println("指定されたインデックスの要素は :: " + myArray[element]);
} else {
System.out.println("無効なインデックスです。0〜" + (myArray.length - 1) + "の範囲で指定してください。");
}
2. try-catchで例外を捕捉する
ユーザー入力のように、どうしても不正な値が渡る可能性がある場合は、try-catchで例外を捕捉し、適切なメッセージを表示してプログラムを継続させる方法もあります。
try {
System.out.println("指定されたインデックスの要素は :: " + myArray[element]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("無効なインデックスが指定されました:" + e.getMessage());
}
3. 拡張for文(for-each)を活用する
すべての要素を先頭から順に処理したいだけであれば、インデックスを扱わない拡張for文を使うことで、そもそもこの例外が発生する余地をなくすことができます。
for (int value : myArray) {
System.out.println(value);
}
まとめ
ArrayIndexOutOfBoundsExceptionは、配列の有効なインデックス範囲(0〜length-1)の外にアクセスしたときに発生する実行時例外です。事前の範囲チェックやtry-catch、拡張for文の活用によって確実に回避できます。
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T
-
JavaのArrayIndexOutOfBoundsExceptionとは?発生原因と対処法を解説
配列とインデックスの基本 配列(Array)とは、同じ型の要素を固定サイズで順番に格納するためのデータ構造(コンテナ/オブジェクト)です。配列のサイズ(長さ)は生成時に決定され、後から変更することはできません。 配列内の各要素の位置は「インデックス(添字)」と呼ばれます。Javaの配列は0始まりのため、最初の要素はインデックス0、2番目の要素はインデックス1、というように順に番号が割り当てられます。 配列の各要素へは、「配列名[インデックス]」という形式の式を使ってアクセスします。 System.out.println(myArray[3]); // 1457 が出力される たとえばサイズ7