Pour tout type t, le type des tableaux de t est noté t[]
;
ce type est sous-type d'Object. La déclaration d'une variable
de type tableau ne crée pas de tableau :
int[] a;
Un tableau est un objet rassemblant un nombre donné de variables de même type, installées consécutivement en mémoire ; ces variables sont appelées les éléments du tableau ; le nombre d'éléments, appelé la longueur du tableau, est représenté par le champ length du tableau ; ce champ est non modifiable ; un tableau de longueur nulle est dit vide .
Un tableau est créé grâce à l'opérateur new[] . L'expression spécifiant la longueur, entre les crochets << [ >> et << ] >>, doit être de type int (ou d'un sous-type de int), et n'est pas nécessairement constante ; sa valeur doit être positive ou nulle. Les éléments d'un tableau sont toujours initialisés à la valeur nulle de leur type. Voici une définition d'un tableau de int de longueur 4 :
int[] a = new int[4];
Cette définition déclare t comme un nom dont le type est << tableau de int>> ; l'évaluation de int[4] crée un objet qui comporte un bloc de mémoire pouvant contenir quatre int ; enfin, t est initialisé par une référence à cet objet, et chacun de ses quatre éléments est initialisé à 0 (figure 1.3).
Il est aussi possible de définir un tableau en initialisant explicitement ses éléments, comme dans l'exemple suivant qui initialise a[0] à 1, a[1] à 2, etc. (figure 1.4) :
int[] a = new int[] {1, 2, 3, 4}; int[] a = {1, 2, 3, 4}; // FORME SIMPLIFIÉE
La seconde forme ne peut être employée que lors de la définition d'une
variable ; la première forme, new t[] {
... }
, est une expression de type t[] qui
définit et initialise un tableau anonyme
et peut être employée dans d'autres contextes.
Les éléments d'un tableau sont toujours accédés par indexation à partir de zéro : les quatre éléments du tableau a sont a[0], a[1], a[2] et a[3]. Ces a[i], et plus généralement a[exp], pour une expression arithmétique exp de type int (ou d'un sous-type de int), sont des variables désignant les éléments du tableau, et peuvent donc être le membre gauche d'une affectation :
int k = ...; a[k+1] = 12;
C'est une erreur de tenter d'accéder à un élément hors des bornes du tableau (par exemple a[-4], a[4]). Cette tentative déclenche à l'exécution l'exception ArrayIndexOutOfBoundsException.
Signalons qu'un tableau, une fois défini, ne peut pas être redimensionné ; c'est pourquoi le type java.util.List, qui n'a pas cette limitation, est fréquemment utilisé à la place d'un type tableau. Cependant, la longueur d'un tableau n'a pas à être connue à la compilation (ce qui est une contrainte des tableaux en Pascal, C et C++) ; on peut définir un tableau dont la longueur, puis les éléments, sont lus sur l'entrée standard en cours d'exécution, ou encore dont la longueur est calculée à l'exécution, par une fonction quelconque :
double[] t = new double[f(n)];