|
|
||||||
Vertiefung des Theorieteils zu Folge 72.3 Arrays, die Objekte speichern |
||||||
|
Bisher haben unsere Arrays einfache int-Zahlen gespeichert. Man kann aber auch Objekte in einem Array speichern. Natürlich geht das nur dann, wenn alle Objekte der gleichen Klasse angehören. Deklaration eines Objekt-ArraysWenn man ein einzelnes Objekt, z.B. ein Auto (Folge 4) deklarieren will, so schreibt man bekanntlich: Auto meinPorsche; Will man einen Array solcher Objekte deklarieren, schreibt man entsprechend: Auto[] autos; Die Zahl der Arrayelemente ist mit dieser Deklaration noch nicht festgelegt. Die Variable autos ist eine Referenz (ein Verweis, Zeiger oder Pointer) auf den eigentlichen Array, der aber noch gar nicht existiert. Initialisierung eines Objekt-ArraysUm ein einzelnes Objekt zu initialisieren, schreiben wir: meinPorsche = new Auto(77000); Damit wird ein neues Objekt der Klasse Auto erzeugt; beim Erzeugen wird der Konstruktor aufgerufen, und diesem Konstruktor können Parameter übergeben werden wie hier z.B. der Kilometerstand des Fahrzeugs. Um einen Array aus Objekten zu initialisieren, sind zwei Schritte notwendig. Zunächst wird der Array selbst erzeugt: autos = new Auto[10]; Damit wird ein Fahrzeugpark aus genau 10 Autos erzeugt - ein Array, der 10 Auto-Objekte umfasst, nämlich autos[0] bis autos[9]. Bei dieser Initialisierung wurden aber noch nicht die Konstruktoren der Klasse Auto aufgerufen. Der Array existiert zwar, aber noch nicht der Inhalt des Arrays, nämlich die zehn Objekte der Klasse Auto. Dazu ist eine for-Schleife gut geeignet: for (int i=0; i<10; i++) autos[i] = new Auto(10000); So werden zehn Auto-Objekte erzeugt, allerdings alle Autos mit dem gleichen Kilometerstand. Sollen die zehn Auto-Objekte einen unterschiedlichen Kilometerstand haben, so muss jedes Objekt einzeln erzeugt werden: autos[0] = new Auto(77000); autos[1] = new Auto(66000); autos[2] = new Auto(20000); ... autos[9] = new Auto(120000); Anders geht es leider nicht. Zugriff auf Objekte eines Objekt-ArraysWir wollen uns jetzt noch ansehen, wie man alle zehn Autos in der Konsole anzeigen lassen kann: for (int i=0; i<10; i++) autos[i].anzeigen(); So einfach geht das - vorausgesetzt, die Klasse Auto stellt ihren Objekten eine anzeigen()-Methode zur Verfügung. VertiefungDas Ganze mit den Autos wollen wir uns noch einmal in einem Objektdiagramm anschauen. Dazu brauchen wir aber erst mal eine übergeordnete Klasse Fahrzeugpark: public class Fahrzeugpark
{
Auto[] autos;
public Fahrzeugpark()
{
autos = new Auto[10];
for (int i = 1; i < 10; i++)
autos[i] = new Auto(10000);
}
}
Betrachten wir uns dann ein Objekt park dieser Klasse Fahrzeugpark. Der oberste rote Kasten steht für dieses eine Objekt. Da die Klasse Fahrzeugpark nur ein einziges Attribut hat, nämlich den Array autos, enthält der rote Kasten auch nur ein einziges Attribut. In dem weißen Kasten steht allerdings kein Wert, sondern ein Pfeil, der auf einen weiteren roten Kasten zeigt. Wie bereits im Text gesagt, wird nach der Deklaration eines Arrays noch kein Array erzeugt, sondern die Erzeugung eines Arrays wird lediglich vorbereitet. Zunächst wird nur ein Zeiger (Pointer, Referenz) auf den zu erzeugenden Array bereitgestellt. Nach der Initialisierung des Arrays ist - bildlich vorgestellt - der zweite rote Kasten vorhanden. Dies ist der eigentliche Array, der hier genau zehn Elemente umfasst. Diese Elemente sind aber auch noch nicht die Objekte, sondern wiederum nur Zeiger auf Objekte. Die Objekte selbst existieren noch nicht. Dazu muss erst jedes Objekt einzeln erzeugt werden. Im Konstruktor der Klasse Fahrzeugpark geschieht dies in einer for-Schleife. Nach dem Durchlaufen der for-Schleife existieren dann zehn Objekte der Klasse Auto, von denen in dem Objektdiagramm aber aus Platzgründen nur drei berücksichtigt sind.
Durch die Initialisierung in der for-Schleife haben alle zehn Objekte am Anfang natürlich die gleichen Attributwerte und damit den gleichen Status. Mit dem BlueJ-Objektinspektor kann man nachprüfen, dass die im Objektdiagramm gezeigten Beziehungen tatsächlich so existieren! |
||||||
Übungen
So könnte Ihr Applet z.B. aussehen.
|
||||||
Zurück zum Theorieteil
|
||||||
|
Diese HTML-Seite wurde erstellt von Ulrich Helmich am 26. September 2006 und geringfügig überarbeitet am 3. Februar 2008. |
||||||