Home > Informatik > Einführung in die OOP > 4. Arrays > 4.3 Theorie: Objekt-Arrays

4.3 Theorie: Objekt-Arrays

Seite 1 - Seite 2 - Seite 3 - Seite 4 - Seite 5 - Seite 6

Zielsetzung

Auf dieser Seite erfahren Sie, wie Objekt-Arrays in Java deklariert, initialisiert und mit konkreten Objekten gefüllt werden. Schritt für Schritt wird erklärt, was bei der Arbeit mit Referenzvariablen zu beachten ist und wie Sie sich die Speicherstruktur eines Objekt-Arrays mit Hilfe des BlueJ-Objektinspektors genau ansehen können. Ziel ist es, das Verständnis für die interne Funktionsweise solcher Arrays zu vertiefen.

Inhalt dieser Seite

1. Deklaration eines Objekt-Arrays

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

public class Inventar
{
   Gegenstand[] g;

Der Compiler weiß jetzt, dass wir mehrere Objekte der Klasse Gegenstand in einem Array mit dem Bezeichner g unterbringen wollen. Die genaue Anzahl der Objekte wird in der Deklaration aber noch nicht festgelegt - wie immer bei Arrays.

Die Situation direkt nach der Deklaration eines Objekt-Arrays

Darstellung eines Objekt-Arrays direkt nach der Deklaration
Autor: Ulrich Helmich, Lizenz: Public domain.

Unser Array mit Elementen der Klasse Gegenstand hat den Namen g. Der Wert der Instanzvariable g ist eine Adresse im Speicher des Rechners, eine Referenz. Da das Array g noch nicht initialisiert wurde, ist noch keine Speicheradresse für die Elemente von g festgelegt. Daher hat g noch den Inhalt null.

2. 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 weitere Referenzen deklariert, die nach ihrer Initialisierung auf zwölf Objekte der Klasse Gegenstand verweisen.

Die Situation nach der Initialisierung

Die Situation nach der Initialisierung des Arrays
Autor: Ulrich Helmich, Lizenz: Public domain.

Die zwölf Arrayelemente (im Bild die roten quadratischen Kästchen) sind nach der Initialisierung zwar schon vorhanden, sie enthalten ihrerseits aber noch keine Daten. Genauer gesagt, handelt es sich bei den zwölf Arrayelementen nicht um konkrete Objekte, sondern ebenfalls um Referenzen auf Objekte, also Variablen, in denen Adressen gespeichert sind.

Nach der Initialisierung der Arrayvariable g zeigen diese 12 Referenzen allerdings noch auf keinen konkreten Bereich im Speicher des Rechners. Die 12 Objekte müssen erst noch initialisiert werden.

3. 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: Public domain.

Wenn Sie sich selbst davon überzeugen wollen, dass das 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: Public domain.

Das Inventar-Objekt enthält eine Instanzvariable 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 (12). Die Arrayelemente sind Referenzen 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.

Zusammenfassung

Deklaration von Gegenstand g
Gegenstand[] g;

Die Referenzvariable g hat den Wert null

Initialisierung von g
g = new Gegenstand[12];

Die Referenzvariable g zeigt auf einen Bereich im Speicher, der 12 Elemente umfasst.

Jedes dieser 12 Elemente wurde deklariert, aber noch nicht initialisiert und hat daher den Wert null.

Erzeugung der Array-Elemente
g[0] = new Gegenstand(1,"Hammer",20,3,567);

g zeigt auf einen Bereich im Speicher, der selbst wieder auf einen Bereich im Speicher zeigt, an dem das konkrete Objekt (1, "Hammer", 20, 3, 567) gespeichert ist.

Seitenanfang
weiter mit Schnittstellen, Spezifikationen und UML-Diagrammen ...