05.03 ArrayIndexOutOfBoundsException

Eine ArrayIndexOutOfBoundsException wird geworfen, wenn auf einen Index außerhalb des Definitionsbereichs eines Arrays zugegriffen wird. Dies ist immer dann der Fall, wenn ein negativer Index, oder ein Index, der größer oder gleich der Größe (Rückgabewert des Attributes length) des Arrays ist, abgefragt wird.

Die ArrayIndexOutOfBoundsException ist eine RuntimeException und erbt von der IndexOutOfBoundsException (von welcher auch die StringIndexOutOfBoundsException erbt). Es handelt sich dabei um keine checked Exception, sie muss also nicht mit in die throws-Klausel aufgenommen werden. Die Exception mitsamt StackTrace kann z. B. so aussehen:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
        at Test.main(Test.java:6)

Diese Meldung zeigt uns, dass der Fehler in der Methode main der Klasse Test in der Zeile 6 verursacht wurde. Und zwar wurde an dieser Stelle versucht auf das 3. Element (index = 2) zuzugreifen. Dieses Element existiert in diesem Array aber nicht, weshalb oben genannte Fehlermeldung geworfen wird.

Das ist der Code zu dieser Meldung:

public class Test {

  public static void main(String[] args) {

    int[] i = new int[2];
    System.out.println(i[2]);
  }
}

Häufige Fehlerursachen

Oftmals wird in einer Schleife auf ein Element außerhalb der Array-Grenzen zugegriffen, so dass ein solcher Fehler zustande kommt. Dies tritt u. a. bei folgenden Beispielen auf:

Falsch
int[] arr = new int[5];
for (int i = 1; i <= arr.length; i++) { System.out.println(arr[i]); }[/sourcecode] [sourcecode language="java"]int[] arr1 = new int[6]; int[] arr2 = new int[5]; for (int i = 0; i < arr1.length; i++) { System.out.println("Arr1 = " + arr1[i] + ", Arr2 = " + arr2[i]); }[/sourcecode] Richtig
int[] arr = new int[5];
for (int i = 1; i < arr.length; i++) { System.out.println(arr[i]); }[/sourcecode] [sourcecode language="java"]int[] arr1 = new int[6]; int[] arr2 = new int[5]; for (int i = 0; i < arr1.length && i < arr2.length; i++) { System.out.println("Arr1 = " + arr1[i] + ", Arr2 = " + arr2[i]); }[/sourcecode] Eine andere Möglichkeit wäre, dass eine Methode das gewünschte Element eines Arrays ermittelt, kein passendes Element findet, und deshalb -1 zurückliefert. Dieser Fall muss dann selbstverständlich von Ihnen abgefangen werden. Fehlerbehebung

Zur Behebung des Problems ist es evtl. hilfreich, wenn Sie sich noch einmal das Kapitel 02.09 Arrays ansehen.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.