Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


2.15.4

Initialisierung von Arrays



Bei der Deklaration eines Verweises wird noch kein Speicher für das Array belegt. Dies geschieht erst bei der Initialisierung. Die Initialisierung eines Arrays erfolgt entweder direkt bei der Deklaration oder nach der Deklaration mit dem new-Operator. Als dritte Möglichkeit existieren die anonymen Arrays, die eine Kombination der ersten beiden Varianten darstellen.

Unabhängig von der Art der Initialisierung ist die Größe eines Arrays fix, nachdem es einmal angelegt ist. In Fällen, in denen ein Container mit variabler Länge benötigt wird, kann auf die Klasse java.util.Vector zurückgegriffen werden, die gewissermaßen ein Array mit dynamischer Länge bereitstellt.

[1.2]Die Klasse java.util.Arrays stellt eine Methode fill() zur Verfügung, mit der ein einmal erzeugtes Array mit einem Wert gefüllt werden kann. Darüber hinaus bietet sie weitere nützliche Funktionalität, beispielsweise zum Suchen oder Sortieren.

Direkte Initialisierung

Bei der direkten Initialisierung werden wie in C alle Elemente in geschweiften Klammern aufgezählt. Die Anzahl der Elemente darf hierbei nicht angegeben werden, da sie automatisch ermittelt wird.
   int[] squares = {1, 2, 4, 9, 16};
   String numbers[] = {"one", "two"}
Diese beiden Beispiele zeigen noch einmal, dass die eckigen Klammern sowohl nach dem Elementtyp als auch nach dem Bezeichner angegeben werden können. Auch geschachtelte Arrays können so initialisiert werden. Hierzu werden geschachtelte Aufzählungen verwendet:
   int[][] cartCoords = {
      {0, 0}, {2, 1}, {3, 1}, {-1, -2}};
Wie oben angedeutet, müssen die Unter-Arrays nicht gleich groß sein. Die Länge der einzelnen Unter-Arrays ist beliebig, solange sie denselben Elementtyp haben. Im folgenden Beispiel wird diese Möglichkeit dazu genutzt, ein pascalsches Dreieck darzustellen:
   int[][] pascal = {{1}, {1, 1}, {1, 2, 1}};

Initialisierung mit new

Bei einer nachträglichen Initialisierung wird ein neues Array mit dem new-Operator erzeugt. Hinter new wird der Elementtyp und die Anzahl der Elemente in eckigen Klammern angegeben:
   int[] squares;
   squares = new int[5];
Hierdurch wird ein neues Array mit fünf Elementen erzeugt und ein Verweis darauf an squares zugewiesen. Nach der new-Anweisung sind die Elemente des Arrays grundsätzlich mit dem Initialwert des Elementtyps initialisiert.

Bei geschachtelten Arrays muss bei der Initialisierung zumindest die Elementanzahl der obersten Schachtelungsebene angegeben werden. Die Größenangaben der tieferen Ebenen ist optional. Jedoch muss beachtet werden, dass bei der Spezifikation der Größen keine »Lücken« entstehen.

Es ist ebenfalls nicht zulässig, beim Anlegen mit new weniger Ebenen anzugeben, als der Verweistyp besitzt.
   int[][][][] nestedArray1, nestedArray2, nestedArray3;
   // legal
   nestedArray1 = new int[2][3][][];   
   // illegal, wegen "Lücke" in Größenangabe
   nestedArray2 = new int[2][][3][4];   
   // illegal, weil eine Ebene fehlt
   nestedArray3 = new int[2][3][];   

Wenn der Elementtyp eines Arrays ein Objekttyp ist, erzeugt der new-Operator lediglich ein Array, d. h. Speicherplatz, in dem Referenzen auf Objekte gespeichert werden können. Die Referenzen selbst haben nach der Initialisierung alle den Wert null, d. h., die im Array zu speichernden Objekte müssen noch zusätzlich erzeugt werden.
   String[] msg = new String[2];

   // ergibt true
   boolean b = (msg[0] == null);
   msg[0] = "Hello";
   msg[1] = "World";

Anonyme Arrays

[1.1]Die anonymen Arrays sind ein Feature, das Java in der Version 1.1 hinzugefügt worden ist. Sie stellen eine gewisse Analogie zu den Literalen der einfachen Datentypen dar und erlauben es, ein Array »direkt« anzugeben, beispielsweise als Methodenparameter. Sie sind besonders dann praktisch, wenn eine Methode ein Array als Argument erwartet und man die übergebenen Werte an keiner anderen Stelle mehr braucht.

Anonyme Arrays bestehen aus dem new-Operator, gefolgt vom Elementtyp, einem eckigen Klammerpaar und einer Aufzählung der Elemente. In diesem Beispiel wird ein Exemplar der Klasse java.awt.Polygon, das die Eckpunktkoordinaten eines Polygons darstellt, mit anonymen Arrays initialisiert:
  Polygon p;
  p = new Polygon(new int[] {1, 3, 3},
                  new int[] {1, 2, 1}, 3);
Als Analogie zu den anonymen Arrays gibt es seit Version 1.1 auch die anonymen Klassen.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.