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