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.