Éviter une java.lang.ArrayIndexOutOfBoundsException

Il s'agit de l'une des exceptions les plus fréquemment rencontrées par les débutants. Sa levée survient lorsque le programme tente d'accéder à un tableau avec un indice invalide. Il s'agit habituellement d'un indice trop grand (on parle dans ce cas d'un débordement), mais il peut aussi s'agir d'un index négatif, chose interdite en Java.

Dans l'exemple suivant, on tente (ligne 6) d'accéder à un tableau au-delà de sa limite supérieure :

3: // tableau[10] n'est pas une position valide
4: // puisque l'indice peut varier de 0 à 9
5: int tableau[] = new int[10];
6: tableau[10] = 3;

Sortie :

C:\>java Programme
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
	at Erreur.main(Erreur.java:6)
C:\>

Il est très facile d'éviter une telle situation par l'ajout d'une simple ligne de code. C'est pourquoi une ArrayIndexOutOfBoundsException n'est pas une exception vérifiée par le compilateur (checked exception) et que l'accès à un tableau n'a pas à être traité à l'intérieur d'un bloc try.

Pour éviter la levée d'une ArrayIndexOutOfBoundsException, il suffit en cas de doute sur la validité de l'indice, de tester sa valeur pour s'assurer qu'il est positif et qu'il ne dépasse pas la limite supérieure du tableau (attribut length).

if (n > 0 && n < tableau.length) { // vérifier la validité de l'indice
    tableau[n] = 3;
} else {
   // signaler l'erreur
}