Welche Variablen gibt es?
Lokale Variablen (Local Variables)
Instanzvariablen (Instance Variables)
Klassen-/Statische Variablen (Class/Static Variables)
Deklaration
Speicherort
Initialisierung
Lebensdauer
Zugriff
Kopie pro...
Verwendungszweck
Schlüsselwort
Innerhalb einer Methode, eines Konstruktors oder eines Code-Blocks.
Auf dem Stack (Stapelspeicher).
Müssen explizit initialisiert werden, bevor sie verwendet werden. Der Compiler erzwingt dies. Kein Standardwert.
Beginnt, wenn die Methode/der Block betreten wird, und endet, wenn die Methode/der Block verlassen wird.
Nur innerhalb der Methode/des Blocks zugänglich, in der sie deklariert wurden.
Keine dauerhafte Kopie; Wert existiert nur während der Ausführung des Blocks.
Temporäre Berechnungen und Speicherung innerhalb einer Methode.
Kein spezielles Schlüsselwort erforderlich.
Instanzvariablen (Nicht-statisch)
Innerhalb einer Klasse, aber außerhalb jeder Methode, jedes Konstruktors oder jedes Blocks.
Auf dem Heap (Halde), als Teil des Objekts, zu dem sie gehören.
Werden automatisch mit Standardwerten initialisiert, wenn sie nicht explizit initialisiert werden (z.B. 0, false, null).
Beginnt, wenn ein Objekt der Klasse erstellt wird, und endet, wenn das Objekt nicht mehr referenziert wird (und vom Garbage Collector entfernt wird).
Über ein Objekt der Klasse zugänglich. Benötigt eine Instanz der Klasse (objectName.instanceVariable).
Jedes Objekt der Klasse erhält eine eigene Kopie dieser Variable. Änderungen an einer Instanzvariable beeinflussen nicht die anderen Instanzen.
Zum Speichern des Zustands eines bestimmten Objekts. Jedes Objekt hat seinen eigenen Zustand.
Kein spezielles Schlüsselwort erforderlich (wenn keine static verwendet wird).
Klassen-/Statische Variablen (Statisch)
Innerhalb einer Klasse, aber außerhalb jeder Methode, jedes Konstruktors oder jedes Blocks, mit dem Schlüsselwort static.
Im Methodenbereich (oft als "PermGen" in älteren JVMs oder Teil des Heap-Bereichs in neueren JVMs bezeichnet). Es gibt nur eine Kopie für die gesamte Klasse.
Werden automatisch mit Standardwerten initialisiert, wenn sie nicht explizit initialisiert werden.
Beginnt, wenn die Klasse geladen wird (in der Regel beim ersten Zugriff oder bei der ersten Objekterstellung) und endet, wenn die JVM beendet wird.
Direkt über den Klassennamen zugänglich, ohne ein Objekt zu erstellen (ClassName.staticVariable). Kann auch über ein Objekt zugegriffen werden, aber das ist nicht empfohlen.
Es gibt nur eine einzige Kopie dieser Variable für die gesamte Klasse. Alle Objekte teilen sich diese eine Kopie. Änderungen an dieser Variable sind für alle Objekte sichtbar.
Zum Speichern von Informationen, die für alle Instanzen einer Klasse gemeinsam sind, oder für Konstanten.
static
Last changed3 days ago