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

7.3 Objekt-Arrays verstehen

Arrays - Objekt-Arrays - besser verstehen - Held

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
Autor: Ulrich Helmich, Lizenz: siehe Seitenende.

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
Autor: Ulrich Helmich, Lizenz: siehe Seitenende.

Die zwölf Arrayelemente (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 Arrayelementen nicht um Objekte, sondern ebenfalls 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.

Referenzen

Wenn Sie mehr über Zeiger, Pointer oder Referenzen wissen möchten, gehen Sie auf diese Seite, die ich eigentlich für die Stufe Q1 geschrieben habe. Engagierte Schüler(innen) sollten aber kein Problem mit dieser Seite haben.

Erzeugung der Arrayelemente

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

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

Die Situation nach der Erzeugung der ersten beiden Elemente

Die Situation nach der Erzeugung der ersten beiden Elemente
Autor: Ulrich Helmich, Lizenz: siehe Seitenende.

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"
Autor: Ulrich Helmich, Lizenz: siehe Seitenende.

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 Arrayelement zeigt, außerdem die Länge des Arrays. Die Arrayelemente 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 Arrayelement g[0] steht. Es erscheint ein dritter roter Kasten. Dieser repräsentiert nun endlich ein konkretes Objekt, nämlich einen Gegenstand.

Diese Version der Klasse Gegenstand entspricht nicht ganz der Klasse Gegenstand, die wir in den bisherigen Übungen erstellt haben. Der Gegenstandstyp fehlt noch, dafür gibt es aber ein Attribut zustand, in dem gespeichert ist, zu wie viel Prozent der Gegenstand noch intakt ist.

Seitenanfang