Lernpfad:Objektorientierte Programmierung mit Java/Referenzen: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
{{Navigation}}
{{Navigation}}
== Objektreferenzen ==
== Objektreferenzen ==
Jede ''Objektinstanz'' einer Klasse wird von Java im Speicher abgelegt. Für jede Instanz wird dazu eine festgelegte Anzahl Bits reserviert, abhängig von den deklarierten Objektvariablen.  
Jede ''Objektinstanz'' einer Klasse wird von Java im Speicher abgelegt. Für jede Instanz wird dazu eine festgelegte Anzahl Bits reserviert, abhängig von den deklarierten Objektvariablen.  
Zeile 5: Zeile 6:
Wird dasselbe Objekt nun einer neuen {{Pfad|Datentypen und Variablen|Variablen}} zugewiesen, als {{Pfad|Parameter und Rückgaben|Parameter}} einer Methode übergeben oder als neue {{Pfad|Objektvariablen|Objektvariable}} gespeichert, wird keine Kopie des Objektes angelegt, sondern eine '''Referenz''' erzeugt. Das bedeutet, dass nur ''die Speicheradresse'' der ersten Objektinstanz im Speicher abgelegt wird. Man spricht auch von einem ''Zeiger'' auf das Objekt.  
Wird dasselbe Objekt nun einer neuen {{Pfad|Datentypen und Variablen|Variablen}} zugewiesen, als {{Pfad|Parameter und Rückgaben|Parameter}} einer Methode übergeben oder als neue {{Pfad|Objektvariablen|Objektvariable}} gespeichert, wird keine Kopie des Objektes angelegt, sondern eine '''Referenz''' erzeugt. Das bedeutet, dass nur ''die Speicheradresse'' der ersten Objektinstanz im Speicher abgelegt wird. Man spricht auch von einem ''Zeiger'' auf das Objekt.  


{{Schublade|[[File:Postfachschraenke.jpg|right|200px]]Man kann sich das wie einen Abholschein der Post vorstellen, auf der steht, dass man ein Paket bei der Poststelle abholen kann. Die Referenznummer auf dem Schein ist ein Zeiger auf den Ort, an dem das Paket von Postboten abgelegt wurde. Der Postmitarbeiter kennt die Referenznummer auch - hat also auch einen Zeiger auf das Paket - und weiß, wo er im Lager suchen muss, um es heraus zu geben.
{{Schublade|[[File:Postfachschraenke.jpg|right|200px]]Man kann sich das wie einen Abholschein der Post vorstellen, auf der steht, dass man ein Paket bei der Poststelle abholen kann. Die Referenznummer auf dem Schein ist ein Zeiger auf den Ort, an dem das Paket von Postboten abgelegt wurde. Der Postmitarbeiter kennt die Referenznummer auch - hat also auch einen Zeiger auf das Paket - und weiß, wo er im Lager suchen muss, um es herauszugeben.


Würde der Mitarbeiter etwas an dem Paket verändern, dann würdest du die Veränderung auch sehen, sobald du das Paket erhalten hast, da es sich um dasselbe Objekt handelt.|Farbe={{Farbe:Info}}}}
Würde der Mitarbeiter etwas an dem Paket verändern, dann würdest du die Veränderung auch sehen, sobald du das Paket erhalten hast, da es sich um dasselbe Objekt handelt.|Farbe={{Farbe:Info}}}}
Zeile 43: Zeile 44:


== Referenzen benutzen ==
== Referenzen benutzen ==
Hat man eine Referenz auf ein Objekt erzeugt, dann kann man sie nutzen, um {{Pfad|Methoden}} ''auf dem referenzierten Objekt aufzurufen''. Dazu wird die [[Punktnotation]] verwendet. Im Quelltext-Auszug oben wurde zum Beispiel eine Referenz <code>a</code> auf ein Objekt der Klasse <code>Zahl</code> erzeugt (Zeile 17). Dann wurde auf dem referenzierten Objekt die Methode <code>public int getZahl()</code> aufgerufen (Zeile 21).
Hat man eine Referenz auf ein Objekt erzeugt, dann kann man sie nutzen, um {{Pfad|Methoden}} ''auf dem referenzierten Objekt aufzurufen''. Dazu wird die [[Punktnotation]] verwendet. Im Quelltext-Auszug oben wurde etwa eine Referenz <code>a</code> auf ein Objekt der Klasse <code>Zahl</code> erzeugt (Zeile 17). Dann wurde auf dem referenzierten Objekt die Methode <code>public int getZahl()</code> aufgerufen (Zeile 21).


=== Sichtbarkeiten und Methodenaufrufe ===
=== Sichtbarkeiten und Methodenaufrufe ===
Die Methode <code>public int getZahl()</code> konnte in diesem Beispiel aufgerufen werden, da ihre ''Sichtbarkeit'' <code>public</code> ist. Das bedeutet, dass alle fremden Objekte, die eine Referenz auf das Objekt besitzen, die Methode aufrufen dürfen. Das Gegenteil ist die Sichtbarkeit <code>private</code>. Sie verbietet allen anderen Objekten den Zugriff. Nur das Objekt selbst darf als <code>private</code> deklarierte Methoden auf sich selber aufrufen. Außerdem gibt es noch eine dritte Sichtbarkeit, die vor allem bei der {{Pfad|Vererbung}} eine Rolle spielt.
Die Methode <code>public int getZahl()</code> konnte in diesem Beispiel aufgerufen werden, da ihre ''Sichtbarkeit'' <code>public</code> ist. Das bedeutet, dass alle fremden Objekte, die eine Referenz auf das Objekt besitzen, die Methode aufrufen dürfen. Das Gegenteil ist die Sichtbarkeit <code>private</code>. Sie verbietet allen anderen Objekten den Zugriff. Nur das Objekt selbst darf als <code>private</code> deklarierte Methoden auf sich selber aufrufen. Außerdem gibt es noch eine dritte Sichtbarkeit, die vorwiegend bei der {{Pfad|Vererbung}} eine Rolle spielt.


; <code>public</code>
; <code>public</code>
8.581

Bearbeitungen