int[] data = new int[10];
data
? 10data
? 0, 1, 2, ..., 8, 9int[] data = new int[10]; | |
data[ -1 ] | immer illegal |
data[ 10 ] | illegal (nach der gegebenen Deklaration) |
data[ 1.5 ] | immer illegal |
data[ 0 ] | immer OK, wenn das Array existiert |
data[ 9 ] | OK |
data[ j ] | hängt vom aktuellen Wert von j ab |
Erinnert Euch daran, dass:
Die Länge eines Arrays in der Anzahl seiner Zellen besteht. Ein Array mit der Länge N hat 0..(N-1) indexierte Zellen.
Indizes müssen vom Typ Integer sein.
Es ist OK Leerzeichen um den Index eines Arrays zu haben,
zum Beispiel ist data[1]
data[ 1 ]
Es ist nicht legal auf eine Zelle zu verweisen, die nicht existiert:
Angenommen wir haben folgendes Array deklariert:
int[] data = new int[10];
Die Tabelle zeigt indexierte Variable dieses Arrays.
Wenn das Programm einen Ausdruck enthält, der immer illegal ist, wird es nicht kompilieren. Die Größe eines Arrays ist dem Compiler nicht bekannt. Die Größe eines Arrays wird häufig durch die Daten zur Laufzeit bestimmt. Da das Array zur Laufzeit des Programms konstruiert wird, kennt der Compiler seine Länge nicht und kann keine Fehler feststellen.
Während ein Java Programm läuft wird jedes Mal, wenn ein Arrayindex verwendet wird, überprüft ob er OK ist. Das wird Grenzen überprüfen (Bounds Checking) genannt und ist äußerst wichtig, um Fehler abzufangen.
Wenn ein laufendes Programm auf eine Zelle verweist, die nicht existiert, wird ein ArrayIndexOutOfBoundsException
ausgelöst,
und das Programm wird beendet.
Hier ist die Deklaration eines weiteren Arrays:
int[] punkte = new int[25];
Welche der folgenden Anweisungen ist legal?