カテゴリ: Java 更新日: 2026/03/21

JavaのIndexOutOfBoundsExceptionを完全ガイド!初心者でも理解できる例外処理と回避方法

IndexOutOfBoundsExceptionクラス
IndexOutOfBoundsExceptionクラス

先生と生徒の会話形式で理解しよう

生徒

「Javaのプログラムを実行していたら、IndexOutOfBoundsExceptionっていうエラーが出て止まってしまいました。これはどういう意味なんですか?」

先生

「IndexOutOfBoundsExceptionは、Javaで配列や文字列などの要素を扱うときに、存在しない位置にアクセスしようとしたときに発生する例外です。初心者がつまずきやすいポイントなので、しっかり理解しておきましょう。」

生徒

「なるほど。じゃあ、どんなときに発生するのか具体的に知りたいです!」

先生

「それでは、基本的な使い方と発生するケースを例を交えて解説していきますね。」

1. IndexOutOfBoundsExceptionとは?

「1. IndexOutOfBoundsExceptionとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. IndexOutOfBoundsExceptionとは?
1. IndexOutOfBoundsExceptionとは?

JavaのIndexOutOfBoundsExceptionは、配列やリスト、文字列のインデックスが範囲外になったときにスローされるランタイム例外です。このクラスはjava.langパッケージに含まれており、特別なインポートをしなくても自動的に使える仕組みになっています。例えば、配列の要素が3つしかないのに、4番目を取得しようとした場合に発生します。

2. 配列でのIndexOutOfBoundsException

2. 配列でのIndexOutOfBoundsException
2. 配列でのIndexOutOfBoundsException

最もよくあるのが配列のアクセス時です。配列のインデックスは必ず0から始まり、要素数−1までしか使えません。初心者は「要素数と同じインデックスまで使える」と勘違いしやすいので注意が必要です。


public class ArrayExample {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30};
        System.out.println(numbers[3]); // 存在しないインデックス
    }
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

このように、配列の範囲を超えるインデックスを指定するとエラーが発生します。配列の長さはlengthプロパティで確認できるため、必ず範囲内かを意識しましょう。

3. 文字列でのIndexOutOfBoundsException

3. 文字列でのIndexOutOfBoundsException
3. 文字列でのIndexOutOfBoundsException

Stringクラスのメソッドでも範囲外アクセスは起こります。特にcharAtsubstringで発生しやすいです。


public class StringExample {
    public static void main(String[] args) {
        String text = "Java";
        System.out.println(text.charAt(4)); // 存在しない文字
    }
}

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 4 out of range for length 4

文字列は長さ4ですが、インデックスは0から3までしか使えません。これを知らないと簡単にエラーが出てしまうため、必ずlength()メソッドで長さを確認してから使いましょう。

4. リストやコレクションでのIndexOutOfBoundsException

「4. リストやコレクションでのIndexOutOfBoundsException」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. リストやコレクションでのIndexOutOfBoundsException
4. リストやコレクションでのIndexOutOfBoundsException

JavaのArrayListや他のコレクションでも、インデックス範囲外アクセスで同じ例外が発生します。配列と違って要素を動的に追加できるリストでも、存在しない位置を指定するとエラーになります。


import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        System.out.println(list.get(2)); // 存在しない要素
    }
}

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2

コレクション操作では、要素数をsize()メソッドで確認してからインデックスを指定する習慣をつけると安全です。

5. IndexOutOfBoundsExceptionを回避する方法

5. IndexOutOfBoundsExceptionを回避する方法
5. IndexOutOfBoundsExceptionを回避する方法

この例外を避けるためには、必ずインデックスが範囲内かを確認することが重要です。次のような方法があります。

  • 配列ならlengthプロパティを利用する
  • 文字列ならlength()メソッドで確認する
  • リストならsize()メソッドを利用する

public class SafeExample {
    public static void main(String[] args) {
        String text = "Java";
        int index = 3;
        if (index < text.length()) {
            System.out.println(text.charAt(index));
        } else {
            System.out.println("範囲外アクセスです");
        }
    }
}

a

このように条件分岐を入れることで、不要な例外を防ぐことができます。例外処理としてtry-catchを使う方法もありますが、基本的には事前に範囲を確認するのがベストプラクティスです。

6. try-catchでの例外処理

6. try-catchでの例外処理
6. try-catchでの例外処理

場合によっては、プログラムを止めずに例外を処理したいこともあります。そのときにはtry-catch構文を使います。


public class TryCatchExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        try {
            System.out.println(numbers[5]);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }
}

例外が発生しました: Index 5 out of bounds for length 3

このように、エラーが出てもプログラムを続行できます。ただし、例外処理に頼るのではなく、正しいインデックス管理を心がけることが大切です。

7. 初心者が注意すべきポイント

「7. 初心者が注意すべきポイント」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. 初心者が注意すべきポイント
7. 初心者が注意すべきポイント

初心者がよく間違えるのは、配列や文字列の長さを正しく理解していないことです。例えば、要素数が3の配列に対して「3番目まである」と考えてしまうケースです。しかし、実際には0から始まるので最後の要素はインデックス2になります。このズレがIndexOutOfBoundsExceptionの最大の原因です。

また、文字列のsubstringを使うときに、終了インデックスを誤って指定すると例外が出ることもあります。特にループ処理やユーザー入力を扱うときは必ず境界チェックを入れる習慣を持ちましょう。

まとめ

まとめ
まとめ

IndexOutOfBoundsExceptionの基本をもう一度整理する

Javaプログラミングを学ぶ過程ではさまざまな例外に出会いますが、その中でも初心者がよく経験するエラーの一つがIndexOutOfBoundsExceptionです。この例外は配列や文字列やリストなど、インデックスという位置番号を使ってデータへアクセスする処理を行う際に発生します。特に配列処理やコレクション処理を学び始めたばかりの段階では、この例外に遭遇する機会が多くなります。

Javaでは配列や文字列のインデックスは必ずゼロから始まります。例えば要素数が三つの配列がある場合、利用できるインデックスはゼロ一二の三つです。しかし初心者は三つの要素があるなら三番目まで使えると考えてしまいがちです。この理解のずれがIndexOutOfBoundsExceptionの原因になることが非常に多いのです。したがってJavaの配列操作や文字列操作では、常にインデックスの範囲を意識することが重要になります。

またこの例外は配列だけでなく、Stringクラスの文字取得メソッドやsubstringメソッド、さらにArrayListなどのコレクションクラスでも発生します。つまりJavaのさまざまなデータ構造に共通して関係する重要な例外なのです。そのためJava初心者だけでなく、実務開発を行うプログラマーにとっても理解しておくべき基本知識となっています。

Java開発でよくある発生パターン

IndexOutOfBoundsExceptionが発生する典型的なケースとして、配列の長さを確認せずに要素へアクセスしてしまうケースがあります。例えばループ処理の条件式を誤って書いた場合や、ユーザー入力をそのままインデックスとして利用した場合などです。このような処理は簡単に範囲外アクセスを引き起こしてしまいます。

文字列操作でも同様の問題が発生します。例えば文字列の長さを確認せずにcharAtメソッドを使うと、存在しない位置の文字を取得しようとして例外が発生します。またsubstringメソッドでは開始位置と終了位置の指定を誤ることでエラーになることがあります。これらはJavaの文字列処理でよくあるミスとして知られています。

コレクションフレームワークでも同じ考え方が重要です。ArrayListやLinkedListなどのリスト構造ではsizeメソッドを使うことで現在の要素数を確認できます。インデックス指定で要素を取得する際には、必ずsizeの範囲内であることを確認する習慣を持つことが安全なJavaプログラムを書くための基本になります。

安全にインデックスを扱うためのサンプルコード

次のサンプルプログラムでは、配列と文字列のインデックス範囲を確認しながら安全にデータを取得する方法を示しています。Java初心者がIndexOutOfBoundsExceptionの回避方法を理解するための基本例として参考にしてください。


public class IndexSafeExample {
    public static void main(String[] args) {

        String text = "Java学習";
        int index = 2;

        if (index < text.length()) {
            System.out.println("取得文字: " + text.charAt(index));
        } else {
            System.out.println("文字列の範囲外アクセスです");
        }

        int[] numbers = {10, 20, 30, 40};

        for (int i = 0; i < numbers.length; i++) {
            System.out.println("配列要素: " + numbers[i]);
        }
    }
}

取得文字: v
配列要素: 10
配列要素: 20
配列要素: 30
配列要素: 40

このコードでは文字列の長さをlengthメソッドで確認し、配列の要素数をlengthプロパティで確認しています。こうした境界チェックを行うことで、IndexOutOfBoundsExceptionの発生を未然に防ぐことができます。Javaプログラミングでは例外処理を書くことも重要ですが、そもそもエラーが起きないように設計することがより大切です。

実務開発で役立つインデックス管理の考え方

実際のシステム開発ではユーザー入力やデータベースから取得した値を扱うことが多く、インデックスの範囲を慎重に扱う必要があります。例えば検索結果の一覧表示やページング処理などでは、配列やリストの要素数を確認してからアクセスする処理が不可欠です。

またログ解析やデータ処理のプログラムでは大量の配列データを扱うことがあります。このような場合でもインデックスの境界条件を正しく管理することでプログラムの安定性を高めることができます。Javaの例外処理は強力な仕組みですが、基本となるインデックス管理を理解しておくことでエラーの発生自体を大きく減らすことができます。

Java初心者がプログラミングスキルを向上させるためには、配列や文字列やコレクションの長さを常に意識する習慣を身につけることが重要です。IndexOutOfBoundsExceptionの原因と回避方法を理解しておくことで、より安全で信頼性の高いJavaプログラムを書くことができるようになります。

先生と生徒の振り返り会話

生徒

今日の解説を読んでIndexOutOfBoundsExceptionがどうして起きるのかがよく分かりました。特に配列や文字列のインデックスがゼロから始まるという点が重要だと理解できました。

先生

とても良い理解です。Javaでは配列やリストなどのデータ構造を扱うときにインデックスの範囲を正しく理解しておくことが重要です。範囲外アクセスをするとIndexOutOfBoundsExceptionが発生します。

生徒

なるほど。要素数が三つならインデックスはゼロ一二までということですね。これを忘れると簡単にエラーが出てしまうということがよく分かりました。

先生

その通りです。また配列だけでなく文字列のcharAtやsubstring、さらにArrayListのgetメソッドなどでも同じ考え方が必要になります。

生徒

今後はlengthやsizeを使って必ず範囲を確認してからアクセスするようにします。そうすればIndexOutOfBoundsExceptionを防げそうですね。

先生

その意識がとても大切です。Javaプログラミングでは配列処理やコレクション操作が頻繁に登場します。インデックス管理をしっかり理解しておくことで、安定したプログラムを書く力が身につきます。

カテゴリの一覧へ
新着記事
New1
Thymeleaf
Thymeleafのth:data-*属性を使いこなす!初心者向け完全解説
更新記事
New2
Spring
Springの@annotationアノテーションの使い方を完全ガイド!初心者でもわかるAOPの活用法
更新記事
New3
Spring
Javaの@withinアノテーションを初心者向けに解説!Spring AOPでの使い方を完全ガイド
更新記事
New4
Spring
Springの@AfterThrowingアノテーションの使い方を完全ガイド!初心者でもわかる例外処理
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
No.3
Java&Spring記事人気No3
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう
No.4
Java&Spring記事人気No4
Java
JavaのDateクラスの使い方を完全ガイド!初心者でもわかる日付操作
No.5
Java&Spring記事人気No5
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.6
Java&Spring記事人気No6
Spring
Spring Data JPAのJpaRepositoryインターフェースの使い方を完全ガイド!初心者でも安心
No.7
Java&Spring記事人気No7
Spring
SpringDataJPAのJPAクエリメソッド「OrderBy」の使い方を完全ガイド!初心者向け解説
No.8
Java&Spring記事人気No8
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門