Exkurs zu Folge 11: Zeiger

Betrachten Sie bitte den folgenden Quelltext. Er unterscheidet sich geringfügig von dem Quelltext aus Folge 11.

1 Der Quelltext des Java-Applets

Betrachten Sie die Methode init() des Applets. Hier stehen all die Anweisungen, die direkt beim Erzeugen des Applets ausgeführt werden sollen.

Als erstes wird hier ein Objekt der Klasse VokabelListe erzeugt:

vokabeln = new VokabelListe();

In der Zeile darunter steht eine Zuweisung

voklist = vokabeln;

An sich ist diese Zuweisung völlig überflüssig, und wir werden sie im nächsten Schritt auch beseitigen. Aber sie soll etwas demonstrieren! Schauen Sie sich den Quelltext von init() genau an. Zuerst werden dem Objekt vokabeln zwei Vokabeln hinzugefügt. Anschließend werden dem Objekt voklist vier andere Vokabeln hinzugefügt.

In der paint()-Methode des Applets wird dann

voklist.anzeigen(g);

aufgerufen. Was würden Sie hier erwarten? Welche Vokabeln werden in dem Applet ausgegeben? Doch wahrscheinlich nur die vier Vokabeln, die dem Objekt voklist hinzugefügt worden sind.

Irrtum! Es werden alle sechs Vokabeln angezeigt, auch die, die dem Objekt vokabeln hinzugefügt worden sind.

Was ist die Erklärung für dieses völlig unerwartete Phänomen?

Wenn Sie in der Folge 9 den Abschnitt über Zeiger bzw. Referenzen aufmerksam durchgelesen haben, werden Sie jetzt müde lächeln. Sie wissen dann, dass in der Zeile

vokabeln = new VokabelListe();

ein Zeiger namens "vokabeln" erzeugt wurde, der die Adresse eines Objektes der Klasse VokabelListe speichert. Man kann dazu auch sagen: "vokabeln zeigt auf ein Objekt der Klasse VokabelListe".

Was geschieht in der folgenden Zuweisung?

voklist = vokabeln;

Auch voklist ist ein Zeiger. Durch die Zuweisung erhält voklist die gleiche Adresse, die in dem Zeiger vokabeln gespeichert ist. Das heißt, dass voklist auf das gleiche Objekt zeigt wie vokabeln:

2 Die beiden Attribute vokabeln und voklist zeigen auf die gleiche Arrayliste

Diese HTML-Seite wurde erstellt von Ulrich Helmich am 28. Mai 2005 mit Golive 6.






IMPRESSUM