Wirtschaftsinformatik (Bachelor-Studiengang): Programmierung (2. Semester)

Sie sind hier: StartseiteWirtschaftsinformatikProgrammierung Java (Kurs 2): Referenzdatentypen

HB / CM, Kurs vom 01.10.2002 - 31.03.2003

Programmierung Java (Kurs 2): Referenzdatentypen: Referenzdatentypen (Unterschied zu den primitiven Datentypen?, Wie kann Referenz-Variable mit Wert versehen werden?, Konstruktoren, Was passiert im Laufe eines Programms auf dem Heap?).

  1. Unterschied zu den primitiven Datentypen?
  2. Wie kann Referenz-Variable mit Wert versehen werden?
  3. Konstruktoren
  4. Was passiert im Laufe eines Programms auf dem Heap?

Referenzdatentypen

3 Arten:

Unterschied zu den primitiven Datentypen?

Bei den primitiven Datentypen:

Beispiel: int x = 10; (Variablen)

Bei den primitiven Datentypen

Bildbeschreibung "Bei den primitiven Datentypen": Kein Verweis auf den Heap.

Dasselbe gilt für Parameter von Methoden.

Bei Referenzdatentypen:

Beispiel: Demo x = newDemo(); (Variable; Demo = Klasse)

Bei Referenzdatentypen

Bildbeschreibung "Bei Referenzdatentypen": Querverweis ("Reference") auf den Heap.

Heap = jedemenge Speicherplatz; Bereich des Stack-Segments ist begrenzt, relativ überschaubar gering.

Dasselbe gilt für Referenz-Parameter.

new:

  1. Erzeugt Speicherplatz auf Heap
  2. Führt den programmierten Konstruktor aus (hier Demo())
  3. Speichert die Adresse im Stack-Segmentbereich

Wie kann Referenz-Variable mit Wert versehen werden?

Beispiel: Demo x = null;

Null ist eine spezielle Adresse, die genau zu diesem Zweck vom System reserviert wird.

Demo x = null;
...
x = newDemo();

Objekt wird hier also erst ein paar Zeilen später erzeugt.

Programmierregel: Referenz-Variablen immer initialisieren!

Null ist zuweisungskompatibel zu allen Refenzdatentypen.

Konstruktoren

kein eigener Konstruktor:

mindestens ein eigener Konstruktor:

Programmierregel: Konstruktoren werden großgeschrieben!
Konstruktoren haben nie einen Rückgabewert!
Konstruktoren können nicht vererbt werden (im Gegensatz zu Methoden)!

Was passiert im Laufe eines Programms auf dem Heap?

Stichwort: Automatisches "Tafelputzen".

Garbage-Kollektor (Müllsammler), achtet darauf, dass auf dem Heap noch Platz ist.
Stellt er fest, dass dies nicht mehr der Fall ist, dann sieht er alle Referenzvariablen im Programm nach, ob diese auf Speicherplatz verweisen und wann bzw. ob dieser Speicherplatz noch gebraucht wird. Nicht benötigter Speicherplatz wird wieder freigegeben. (Merkbar am Laufzeitverhalten des Programms.)

Erkennungsalgorithmen zum Erkennen von nicht mehr benötigten Objekten.

Beispiel: ... Demo x = null;