Helmichs Informatik-Lexikon

Array-Initialisierung

Syntax der Initialisierung

Bei der Initialisierung eines Arrays gibt man zunächst den Namen des Arrays an, dann kommt ein Gleichheitszeichen. Nach dem Befehl new steht dann noch einmal der Datentyp des Arrays und in eckigen Klammern dann die Anzahl der gewünschten Elemente. Am Ende folgt - wie immer - ein Semikolon.

zahl = new int[8];
wert = new double[2000];
meldung = new String[8];
ball = new Kreis[12];

Quelltext 1: Initialisierung von Arrays

Die Initialisierung eines Objekt-Arrays sieht genau so aus wie die Initialisierung von einfachen Arrays, wie man im letzten Beispiel sieht.

Nähere Analyse der Initialisierung

Beschreibung siehe folgenden Text

Situation nach der Initialisierung
Autor: Ulrich Helmich 2016, Lizenz: siehe Seitenende

Nach der Initialisierung existiert eine Variable mit dem Namen des Arrays - hier zahl. Der Inhalt dieser Variable ist eine Referenz (ein Verweis, ein Zeiger) auf einen Bereich im Arbeitsspeicher des Rechners. Für den Array zahl wurden acht Speicherplätze angefordert, diese acht Speicherplätze sind jetzt verfügbar. Allerdings stehen noch keine Werte in diesen acht Speicherplätzen, sondern die Arrayelemente enthalten den Default-Wert für Zahlen, nämlich 0.

Jeder einzelne der acht Speicherplätze kann durch den seinen Index angesprochen werden. Der erste Speicherplatz hat den Index 0 - das ist etwas gewöhnungsbedürftig und führt häufig zu Fehlern.

Ein kleines Experiment
public class Liste
{
   int[] zahl; // Deklaration

   public Liste()
   {
      zahl = new int[8];  // Initialisierung
   }

   public void ausgeben()
   {
      System.out.println(zahl);
   }
}

Quelltext 2: Inhalt der Array-Variablen zahl

In der Konsole werden nicht etwa acht Nullen angezeigt, also die Default-Werte des frisch initialisierten Arrays, sondern es erscheint eine Meldung wie [I@28fd9bf. Was ist hier falsch gelaufen?

Der Befehl

System.out.println(zahl);

gibt nicht die acht Element des Arrays aus, sondern den Inhalt der Array-Variablen zahl. Diese Array-Variable ist aber lediglich eine Referenz, ein Zeiger auf den Bereich im Speicher, an dem sich die eigentlichen Daten befinden. Und [I@28fd9bf ist eine solche Adresse.

Initialisierung von Objekt-Arrays

Auch nach der Initialisierung eines Objekt-Arrays wie

ball = new Kreis[12];

enthält die eigentliche Array-Variable - hier ball - nur eine Referenz auf den eigentlichen Speicherbereich. Während diese Referenz nach der Deklaration des Arrays noch auf den Wert null zeigt, verweist sie jetzt tatsächlich auf einen konkreten Bereich im Speicher des Rechners. In diesem Speicherbereich befinden sich nun 12 Arrayelemente. Allerdings enthalten diese 12 Elemente noch keine konkreten Inhalte, sondern sie verweisen ihrerseits auf Bereiche im Arbeitsspeicher, an denen sich die eigentlichen Inhalte befinden, nämlich die 12 Objekte der Klasse Kreis. Da aber noch keine Kreis-Objekte in den Objekt-Array eingefügt worden sind, zeigen diese Verweise ins Leere, haben also den Wert null:

Beschreibung siehe folgenden Text

Situation nach der Initialisierung eines Objekt-Arrays
Autor: Ulrich Helmich 2016, Lizenz: siehe Seitenende

Wir wollen nun den beiden ersten Arrayelementen zwei Kreise zuweisen:

ball[0] = new Kreis(20, 20,100,100);
ball[1] = new Kreis(60,120, 50, 50);

Quelltext 3: Zwei Kreis-Objekte werden erzeugt und in dem Array gespeichert. Jedes Kreis-Objekt besitzt vier Attribute, die für die Position des Kreises, den Durchmesser in der Waagerechten und den Durchmesser in der Senkrechten stehen können, so dass auch Ovale gezeichnet werden können.

Mit new() werden zwei Kreis-Objekte erzeugt und gleichzeitig in den beiden ersten Elementen des Arrays gespeichert. Diese beiden Arrayelemente verweisen jetzt nicht mehr auf den Default-Wert null, sondern auf den Speicherbereich, an dem sich die beiden Kreis-Objekte tatsächlich befinden:

Beschreibung siehe folgenden Text

Situation nach der Erzeugung von zwei konkreten Objekten
Autor: Ulrich Helmich 2016, Lizenz: siehe Seitenende

So sieht der Array ball aus, wenn tatsächlich zwei Kreis-Objekte in dem Array gespeichert wurden. Die beiden ersten Arrayelemente zeigen auf zwei Objekte der Klasse Kreis, die anderen zehn Arrayelemente zeigen auf einen noch nicht näher definierten Bereich im Speicher, haben daher also den Wert null.