Home > Informatik > Stufe EF > Folge 7 (Arrays)

7.4 Objekt-Arrays besser verstehen

Arrays - Objekt-Arrays - Verstehen - besser verstehen - bunte Kreise

Deklaration eines Objekt-Arrays

Schauen wir uns den Quelltext von Inventar genauer an. Am Anfang wird der Array g deklariert:

public class Inventar
{
   Gegenstand[] g;

Mit den eckigen []-Klammern teilen wir dem Programm mit, dass wir nicht ein einzelnes Objekt der Klasse Gegenstand benötigen, sondern viele Objekte dieser Klasse - einen Array von Objekten. Die genaue Anzahl der Objekte wird in der Deklaration aber noch nicht festgelegt.

Die Situation direkt nach der Deklaration eines Objekt-Arrays

Darstellung eines Objekt-Arrays direkt nach der Deklaration

Die Variable - genauer: das Attribut - g enthält keine herkömmlichen Daten, sondern zeigt auf einen Bereich im Speicher des Rechners. Solche Variablen werden daher auch als Zeiger oder Pointer bezeichnet. Gelegentlich hört man hierfür auch den Begriff Referenz. Nur die Fachleute kennen den Unterschied zwischen Zeigern, Pointern und Referenzen, wir wollen uns mit solchen Spitzfindigkeiten hier nicht aufhalten.

Initialisierung eines Objekt-Arrays

Die Initialisierung eines Objekt-Arrays erfolgt im Konstruktor der aufrufenden Klasse:

public class Inventar
{
    Gegenstand[] g;
    
    public Inventar()
    {
       g = new Gegenstand[12];

Hier sagen wir dem Programm, dass wir genau zwölf Objekte der Klasse Gegenstand anlegen wollen. Konkret erzeugt werden die Objekte allerdings noch nicht, sondern es werden lediglich zwölf Referenzen (Zeiger) erzeugt, die später auf zwölf Objekte der Klasse Gegenstand verweisen.

Die Situation nach der Initialisierung

Die Situation nach der Initialisierung

Die zwölf Array-Elemente (im Bild die roten quadratischen Kästchen) sind nach der Initialisierung zwar schon vorhanden, sie enthalten aber noch keine Daten. Genauer gesagt, handelt es sich bei den zwölf Array-Elementen nicht um Objekte, sondern um Referenzen auf Objekte. Nach der Initialisierung zeigen diese Referenzen allerdings noch auf keinen konkreten Bereich im Speicher des Rechners. Man sagt, die Referenz bzw. der Zeiger (engl. Pointer) hat den Wert null.

Wenn Sie mehr über Referenzen erfahren wollen, müssen Sie auf die entsprechende Seite in meiner Q1-Abteilung gehen.

Erzeugung der Array-Elemente

      g[ 0] = new Gegenstand("Hammer",20,3,567);
      g[ 1] = new Gegenstand("Helm",0,13,230);
      u.s.w.

Hier müssen wir wirklich zwölf Zeilen hinschreiben, weil ja jeder Gegenstand einen Namen und drei Werte benötigt, die sich der Computer nicht einfach ausdenken kann. Eine for-Schleife würde hier also überhaupt keinen Sinn machen! Mit g[0] sprechen wir den ersten Gegenstand an.

Die Situation nach der Erzeugung der ersten beiden Elemente

Die Situation nach der Erzeugung der ersten beiden Elemente

Wenn Sie sich selbst davon überzeugen wollen, dass der Array g tatsächlich so aufgebaut ist, wie im Text beschrieben, starten Sie doch einfach mal den Objektinspektor von BlueJ und doppelklicken Sie auf das erzeugte Objekt der Klasse Inventar.

Aufruf des Objektinspektors

Aufruf des Objekt-Inspektors zur Analyse des Objekt-Arrays"

Das Inventar-Objekt enthält ein Attribut Gegenstand g[], unseren Objekt-Array. Klicken Sie dann auf den Pfeil, der im Objektinspektor zu sehen ist. Es erscheint ein größerer Kasten, der alle zwölf Array-Element zeigt, außerdem die Länge des Arrays. Die Array-Elemente sind keine gewöhnlichen Datentypen, sondern Verweise auf andere Stellen im Speicher. Daher werden sie im Objektinspektor wieder als Pfeile dargestellt.

Klicken Sie nun auf den ersten Pfeil, der für das Array-Element g[0] steht. Es erscheint ein dritter roter Kasten. Dieser repräsentiert nun endlich ein konkretes Objekt, nämlich einen Gegenstand.

Weiter mit bunten Kreisen...