Home > Informatik > Begriffe und Konzepte > Referenz

Referenz

Definition

Referenz

Eine Referenz ist ein Verweis auf ein Objekt im Speicher.

Sie speichert nicht das Objekt selbst, sondern dessen Adresse im Speicher, so dass über die Referenz auf das Objekt zugegriffen werden kann.

Speicherbereiche

In Java werden Objekte im sogenannten Heap-Speicher (kurz: Heap) abgelegt. Das ist ein spezieller Bereich des Arbeitsspeichers, der zur Laufzeit vom Java-Programm dynamisch verwaltet wird. Genauer gesagt, verwaltet die sogenannte Java Virtual Machine (JVM) diesen Heap. Immer wennwir ein neues Objekt mit dem new-Operator erzeugen, wird dieses Objekt im Heap abgelegt.

Circle sonne = new Circle();

Mit new Circle() wird Speicherbereich für ein Objekt der Klasse Circle im Heap erzeugt.

Mit sonne = new Circle() wird die Adresse dieses Speicherbereiches in der Instanzvariable sonne abgelegt.

Die Variable sonne wird im sogenannten Stack-Speicher verwaltet. Der Stack ist ein anderer Bereich des Arbeitsspeichers, der vor allem für Methodenaufrufe und lokale Variablen verwendet wird.

Lokale Referenzvariablen

Nicht nur Instanzvariablen können Referenzen auf Bereiche im Heap sein, sondern auch lokale Variablen, die Objekte einer Klasse sind. Sobald die Methode beendet wird, in der diese lokalen Referenzen erzeugt wurden, werden die im Heap angelegten Speicherbereiche "entsorgt". Diese automatische Speicherbereinigung wird auch Garbage Collection (Mülleinsammeln) genannt.

Experimente mit Referenzvariablen

Lassen Sie sich doch einmal ein Circle-Objekt wie sonne oder eine beliebige andere Referenz mit dem System.out.println()-Befehl auf der Konsole ausgeben. Je nach Betriebssystem sehen Sie eine mehr oder weniger kryptische Ausgabe, die nichts anderes ist, als die Adresse des Objekts auf dem Heap.

Machen Sie nun folgendes Experiment:

   Circle sonne, mond;
   sonne = new Circle();
   mond  = new Circle();
   System.out.println(sonne);
   System.out.println(mond);
   mond = sonne;
   System.out.println(sonne);
   System.out.println(mond);

Die beiden ersten System.out.println()-Befehle geben unterschiedliche Adressen aus. Nach der Zuweisung mond = sonne wird aber zweimal die gleiche Adresse angezeigt, nämlich die von sonne. Beide Referenzvariablen zeigen jetzt auf die gleiche Adresse im Heap.

Quellen:

  1. Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.
  2. Barnes, Kölling: Java lernen mit BlueJ - Objects first. Pearson-Verlag 2019.
  3. Ullenboom: Java ist auch eine Insel, Rheinwerk Computing 2023.