Merkzettel: Variablen
Die Namensgebung bei objektorientierten
Konstrukten von Java ist insofern problematisch, als dass sie sich aus
drei Quellen speist: Der Programmiersprache C (Beispiel:
Schlüsselwort static
für Klassenvariablen, die man somit auch statische Variablen
nennt), der Programmiersprache C++ (dort nennt man Instanzvariablen
auch Member-Variablen) und theoretischen Überlegungen zur
Objektorientierung (dort werden Instanzvariablen oft Attribute
genannt). Die Einflüsse des letzten Punktes sind
künstliche
Intelligenz, Datenmodellierung für Datenbanken, UML etc.
Namensgebung
- Klassenvariablen
- Auch: Statische Variablen (selten: globale Variablen)
- Lebensdauer: So lange eine Klasse lebt (=immer;
Klassen sterben nie)
- Instanzvariablen
- Auch: Attribute, Objektvariablen, Member-Variablen
- Lebensdauer: So lange die Instanz (einer Klasse, also
ein Objekt) lebt.
- Lokale Variablen
- Lebensdauer: Sterben mit Beendigung des Blocks, in dem
sie
definiert sind, beispielsweise bei Beendigung einer Methode (deren
Rumpf ja ein Block ist).
Übersetzungszeit und Laufzeit
Hier kommt unglücklicherweise noch eine weitere Verwendung von
"statisch" vor. Nehmen Sie als Beispiel folgendes Code-Stück:
Object obj = "abc";
- Statisch: Zur Übersetzungszeit. Der statische Typ
von obj ist Object.
- Dynamisch: Zur Laufzeit. Der dynamische Typ
von obj ist String.
Der Bindungs-Keller
Auf dem Bindungs-Keller werden die lokalen Variablen verwaltet. Er ist
eine bewusst einfach gehaltene Abstraktion von Vorgängen, die in
der Java Virtual Machine stattfinden. In diesem Keller werden
sogenannte Bindungs-Frames verkettet gespeichert. Zugriff erfolgt last in, first out
(LIFO), nur das oberste Kellerelement ist jeweils sichtbar. Ein Frame
kann als Abbildung aufgefasst werden; es werden die Namen lokaler
Variablen auf Werte abgebildet. Ein Eintrag eines Frames heisst
"Bindung", da der Name an den Wert gebunden
wird. Frames werden als Keller verwaltet, um Rekursion beim
Methoden-Aufruf zu ermöglichen. Somit werden in einem Frame alle
Daten eines Methodenaufrufs gespeichert und diese Daten entfernt,
sobald die Methode verlassen wird.
Letzte Änderung:
2006-06-03