Einordnung
Instanzvariablen sind ein zentrales Thema in der objektorientierten Programmierung mit Java. Sobald du mit Klassen und Objekten arbeitest, kommst du an ihnen nicht vorbei.
Viele Anfänger kennen zwar den Begriff, können aber oft nicht sauber unterscheiden, was eine Instanzvariable ist und was eine lokale Variable oder Klassenvariable. Genau das klären wir hier sauber und ohne unnötiges Theorie-Gelaber.
Was sind Instanzvariablen?
Instanzvariablen sind Variablen, die zu einem konkreten Objekt gehören.
Das heißt:
- sie werden in einer Klasse definiert
- aber ihr Wert gehört immer zu einer einzelnen Instanz
- jedes Objekt hat seine eigenen Werte für diese Variablen
Einfach gesagt: Instanzvariablen speichern den Zustand eines Objekts.
Einfaches Beispiel
public class Auto {
String marke;
int baujahr;
}Hier sind marke und baujahr Instanzvariablen.
Wenn du jetzt Objekte erzeugst, bekommt jedes Objekt eigene Werte:
Auto auto1 = new Auto(); auto1.marke = "BMW"; auto1.baujahr = 2020; Auto auto2 = new Auto(); auto2.marke = "Audi"; auto2.baujahr = 2023;
Obwohl beide Objekte aus derselben Klasse stammen, haben sie unterschiedliche Zustände.
Warum heißen sie Instanzvariablen?
Der Name kommt daher, dass sie zu einer Instanz einer Klasse gehören.
- Die Klasse ist der Bauplan
- das Objekt ist die konkrete Instanz
- die Instanzvariable speichert die Daten dieser Instanz
Ohne Instanzvariablen wären Objekte kaum interessant, weil sie dann keinen eigenen Zustand hätten.
Wo stehen Instanzvariablen im Code?
Instanzvariablen stehen direkt in der Klasse, aber außerhalb von Methoden und Konstruktoren.
Beispiel:
public class Person {
String name;
int alter;
public void vorstellen() {
System.out.println("Ich heiße " + name);
}
}name und alter stehen im Klassenkörper. Genau daran erkennst du, dass es keine lokalen Variablen sind.
Unterschied zu lokalen Variablen
Lokale Variablen entstehen innerhalb einer Methode oder eines Blocks.
Beispiel:
public void ausgabe() {
int zahl = 10;
System.out.println(zahl);
}Hier ist zahl eine lokale Variable.
Der Unterschied:
- Instanzvariable gehört zum Objekt
- lokale Variable gehört nur zur Methode und lebt nur dort kurzzeitig
Instanzvariablen bleiben also Teil des Objektzustands. Lokale Variablen nicht.
Unterschied zu Klassenvariablen
Klassenvariablen gehören nicht zu einem einzelnen Objekt, sondern zur Klasse insgesamt. Sie werden mit static markiert.
Beispiel:
public class Auto {
static int anzahlAutos;
String marke;
}Hier ist:
anzahlAutoseine Klassenvariablemarkeeine Instanzvariable
Der Unterschied ist wichtig:
- Instanzvariablen haben pro Objekt eigene Werte
- Klassenvariablen werden von allen Objekten gemeinsam geteilt
Standardwerte von Instanzvariablen
Ein Vorteil in Java ist: Instanzvariablen bekommen automatisch Standardwerte, wenn du nichts setzt.
Zum Beispiel:
intwird0doublewird0.0booleanwirdfalse- Referenztypen wie
Stringwerdennull
Beispiel:
public class Test {
int zahl;
boolean aktiv;
String text;
}Wenn du ein Objekt erzeugst, haben diese Variablen automatisch Startwerte.
Das gilt nicht für lokale Variablen. Die musst du vor der Nutzung selbst initialisieren.
Instanzvariablen und Konstruktoren
Instanzvariablen werden oft über Konstruktoren gesetzt.
Beispiel:
public class Auto {
String marke;
int baujahr;
public Auto(String marke, int baujahr) {
this.marke = marke;
this.baujahr = baujahr;
}
}Der Konstruktor sorgt hier dafür, dass ein neues Auto direkt sinnvolle Werte bekommt.
Gerade deshalb hängen die Themen Konstruktoren und Instanzvariablen eng zusammen.
Praxisbezug
In echten Java-Programmen beschreiben Instanzvariablen fast immer Eigenschaften eines Objekts.
Ein paar typische Beispiele:
name,alterbei einer Personpreis,titelbei einem Produktkontostandbei einem Kontofarbe,baujahrbei einem Auto
Du kannst dir also merken: Instanzvariablen beschreiben, wie ein Objekt gerade aussieht oder in welchem Zustand es ist.
Typische Fehler
Gerade am Anfang passieren oft diese Verwechslungen:
- Instanzvariablen mit lokalen Variablen verwechseln
- denken, alle Objekte teilen denselben Wert
staticund nicht-staticdurcheinanderbringen- nicht verstehen, warum
thisauf eine Instanzvariable zeigt
Ein klassischer Denkfehler ist: „Wenn die Variable in der Klasse steht, dann ist sie doch für alle gleich.“ Das stimmt eben nur bei static.
Ein kleines Gesamtbeispiel
public class Person {
String name;
int alter;
public Person(String name, int alter) {
this.name = name;
this.alter = alter;
}
public void vorstellen() {
System.out.println(name + " ist " + alter + " Jahre alt.");
}
}Verwendung:
Person p1 = new Person("Anna", 22);
Person p2 = new Person("Ben", 30);
p1.vorstellen();
p2.vorstellen();Hier haben beide Objekte dieselben Instanzvariablen, aber unterschiedliche Werte.
Fazit
Instanzvariablen in Java gehören zu einem konkreten Objekt und speichern dessen Zustand. Genau dadurch werden Objekte überhaupt erst nützlich.
Wichtig ist vor allem:
- sie stehen in der Klasse
- sie gehören zu einer Instanz
- jedes Objekt hat eigene Werte
- sie sind nicht dasselbe wie lokale Variablen oder Klassenvariablen
Wenn du diesen Unterschied sauber verstanden hast, bist du beim OOP-Einstieg schon ein gutes Stück weiter.
Nächster Schritt
Als Nächstes passen besonders gut:
- Klassenvariablen vs Instanzvariablen
- Konstruktoren in Java
- Objekte und Instanzen in Java
