Java – Static vs. Instance Variablen / Methoden – 2026-02-09 (Udemy, ASS)¶
Statische vs. Instanzvariablen in Java¶
Statische Variablen (Klassenvariablen)¶
- Definition: Werden von allen Instanzen gemeinsam genutzt.
- Deklaration: Mit
static. - Initialisierung: Einmalig beim Laden der Klasse.
- Zugriff: Über den Klassennamen.
- Speicher: Klassenbereich (Method Area).
Beispiel:
public class MyClass {
static int staticVariable = 10;
}
int value = MyClass.staticVariable;
Instanzvariablen (Objektvariablen)¶
- Definition: Pro Objekt einzigartig.
- Deklaration: Ohne
static. - Initialisierung: Für jedes Objekt separat.
- Zugriff: Über eine Instanz.
- Speicher: Heap (pro Objekt).
Beispiel:
public class MyClass {
int instanceVariable;
}
MyClass obj1 = new MyClass();
obj1.instanceVariable = 5;
Unterschiede (Variablen)¶
| Aspekt | Statisch | Instanz |
|---|---|---|
| Deklaration | mit static |
ohne static |
| Initialisierung | einmalig | pro Objekt |
| Zugriff | MyClass.var |
obj.var |
| Speicher | Klassenbereich | Heap |
| Zweck | gemeinsame Daten | objektspezifischer Zustand |
Statische vs. Instanzmethoden¶
Statische Methoden¶
- Gehören zur Klasse.
- Deklaration mit
static. - Aufruf ohne Instanz.
- Zugriff nur auf statische Member.
Beispiel:
public class MyClass {
static int staticVariable = 10;
static void staticMethod() {
System.out.println(staticVariable);
}
}
MyClass.staticMethod();
Instanzmethoden¶
- Gehören zu einer konkreten Instanz.
- Ohne
static. - Aufruf über Objekt.
- Zugriff auf Instanz- und statische Member.
Beispiel:
public class MyClass {
int instanceVariable = 5;
static int staticVariable = 10;
void instanceMethod() {
System.out.println(instanceVariable);
System.out.println(staticVariable);
}
}
MyClass obj = new MyClass();
obj.instanceMethod();
Wichtige Regeln¶
- Keine Instanzmember in statischen Methoden:
public class MyClass {
int instanceVariable = 5;
static int staticVariable = 10;
static void staticMethod() {
// System.out.println(instanceVariable); // Fehler
System.out.println(staticVariable);
}
}
-
thisundsupernicht erlaubt in statischen Methoden. -
Überladen möglich, Überschreiben nicht (Method Hiding):
class SuperClass {
static void staticMethod() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
static void staticMethod() {
System.out.println("SubClass");
}
}
SuperClass.staticMethod();
SubClass.staticMethod();
- Nutzung in statischen Initialisierungsblöcken:
public class MyClass {
static int staticVariable;
static {
initializeStaticVariable();
}
static void initializeStaticVariable() {
staticVariable = 20;
}
}