Java Konstruktor einfach erklärt: Objekte initialisieren
Lerne, wie Java Konstruktoren funktionieren und wie du als Einsteiger, Azubi oder Student damit Objekte sauber initialisierst.
Von Marcel Schmidtpeter 30. Juli 2026
Stell dir vor, du startest dein erstes Java-Projekt im Studium oder deiner Ausbildung. Du hast eine Klasse `Auto` geschrieben und willst jetzt ein richtiges Auto-Objekt erzeugen. Aber wie sagst du Java, dass dieses Auto rot sein soll und 200 PS hat? Genau hier kommt der Java Konstruktor ins Spiel - eine spezielle Methode, die beim Erstellen eines Objekts automatisch aufgerufen wird und es mit Startwerten versorgt.
Ohne Konstruktor würden alle deine Objekte mit Standardwerten starten: `0` bei Zahlen, `null` bei Referenztypen, `false` bei booleschen Werten. Meistens willst du aber gleich beim Erstellen festlegen, welche Eigenschaften dein Objekt hat. Deshalb ist der Java Konstruktor essenziell - er ist der Startpunkt jedes Objekts.
Wenn du noch unsicher bist, was Klassen und Objekte überhaupt sind, wirf zuerst einen Blick in unseren Artikel zu Java Klassen & Objekte.
Was ist ein Java Konstruktor?
Ein Java Konstruktor ist ein spezieller Codeblock innerhalb einer Klasse, der exakt dann ausgeführt wird, wenn du ein neues Objekt mit dem Schlüsselwort `new` erzeugst. Seine einzige Aufgabe ist es, das Objekt initial zu initialisieren, also seine Attribute mit definierten Startwerten zu füllen.
Stell dir den Konstruktor wie einen Geburtstag vor: Wenn ein Mensch geboren wird, bekommt er sofort einen Namen und ein Geburtsdatum. Der Konstruktor macht genau das für deine Objekte - er gibt ihnen bei der "Geburt" ihre Anfangseigenschaften.
So erkennst du einen Konstruktor
Drei Regeln machen den Konstruktor eindeutig und unterscheiden ihn von normalen Methoden:
Er heißt exakt wie die Klasse - Groß- und Kleinschreibung müssen stimmen.
Er hat keinen Rückgabetyp - nicht einmal `void`.
Er wird ausschließlich mit `new` aufgerufen.
Hier ein einfaches Beispiel für einen Java Konstruktor:
public class Auto {
// Eigenschaften (Attribute) der Klasse
String farbe;
int ps;
// Das ist der Konstruktor
// Name = Klassenname, kein Rueckgabetyp
Auto(String pFarbe, int pPs) {
this.farbe = pFarbe;
this.ps = pPs;
}
}Das Schlüsselwort `this` ist hier wichtig. Es verweist auf das aktuelle Objekt, das gerade erstellt wird. `this.farbe = pFarbe` bedeutet: "Nimm den Parameter `pFarbe` und speichere ihn in der Objekteigenschaft `farbe`." Ohne `this` wüsste Java bei gleichen Namen nicht, ob du die Eigenschaft oder den Parameter meinst.
Merke: Ein Java Konstruktor heißt wie die Klasse, hat keinen Rückgabetyp und initialisiert ein Objekt bei seiner Erstellung.
Wie funktioniert der Standardkonstruktor?
Wenn du in deiner Klasse gar keinen Konstruktor schreibst, erzeugt Java automatisch einen Standardkonstruktor (auch Default-Konstruktor genannt). Dieser ist parameterlos und macht nichts weiter, als die Standardwerte zuzuweisen.
public class Auto {
String farbe;
int ps;
// Kein eigener Konstruktor geschrieben
// Java erstellt automatisch:
// Auto() {}
}
// Verwendung
Auto meinAuto = new Auto();
// farbe ist null, ps ist 0Das ist praktisch für schnelle Tests. Sobald du aber einen eigenen Konstruktor definierst, "vergisst" Java den Standardkonstruktor. Er wird nicht mehr automatisch generiert. Warum? Weil Java davon ausgeht: Wenn du einen eigenen Konstruktor schreibst, willst du die Kontrolle über die Initialisierung behalten und hast gute Gründe, leere Objekte zu verbieten.
Achtung: Hast du einen eigenen Konstruktor mit Parametern geschrieben, brauchst du zusätzlich einen parameterlosen Konstruktor, wenn du auch Objekte ohne Parameter erstellen willst. Den musst du dann manuell hinzufügen.
Was sind parametrisierte Konstruktoren?
Ein parametrisierter Konstruktor nimmt Parameter entgegen und nutzt sie, um die Eigenschaften des Objekts direkt zu initialisieren. Das ist der Normalfall in der professionellen Entwicklung, da du so sicherstellst, dass dein Objekt sofort in einem gültigen Zustand ist. Ein Auto ohne Farbe oder PS ist in der Realität oft sinnlos - dein Code sollte das widerspiegeln.
public class Auto {
String farbe;
int ps;
String marke;
// Parametrisierter Konstruktor
Auto(String pFarbe, int pPs, String pMarke) {
this.farbe = pFarbe;
this.ps = pPs;
this.marke = pMarke;
}
public void zeigeInfo() {
System.out.println(marke + " - " + farbe + " - " + ps + " PS");
}
}Jetzt erzeugst du ein Objekt und übergibst gleichzeitig die Werte:
public class Main {
public static void main(String[] args) {
Auto meinAuto = new Auto("rot", 200, "BMW");
meinAuto.zeigeInfo();
// Ausgabe: BMW - rot - 200 PS
}
}Stell dir das wie einen Bestellzettel vor: Wenn du bei der Autovermietung anrufst, sagst du gleich am Telefon, welches Auto du willst. Du musst nicht erst ein leeres Auto "bestellen" und es dann mühsam nachträglich konfigurieren.
Wie nutzt du Konstruktor-Überladung?
Java erlaubt Konstruktor-Überladung. Das bedeutet, du kannst mehrere Konstruktoren in einer Klasse definieren, solange sich ihre Parameterlisten unterscheiden. Entweder durch die Anzahl der Parameter oder durch deren Datentypen.
Das bietet Flexibilität für verschiedene Anwendungsfälle. Vielleicht willst du ein Auto erstellen, bei dem nur die PS wichtig sind, und die Farbe später bestimmt wird.
public class Auto {
String farbe;
int ps;
String marke;
// Konstruktor 1: Alles angegeben
Auto(String pFarbe, int pPs, String pMarke) {
this.farbe = pFarbe;
this.ps = pPs;
this.marke = pMarke;
}
// Konstruktor 2: Nur Farbe und PS
Auto(String pFarbe, int pPs) {
this.farbe = pFarbe;
this.ps = pPs;
this.marke = "Unbekannt"; // Standardwert
}
// Konstruktor 3: Nur PS
Auto(int pPs) {
this.farbe = "weiss";
this.ps = pPs;
this.marke = "Unbekannt";
}
}Je nach Situation wählst du den passenden Konstruktor:
Auto auto1 = new Auto("blau", 150); // Ruft Konstruktor 2 auf
Auto auto2 = new Auto(300); // Ruft Konstruktor 3 aufKonstruktor-Typ | Parameter | Anwendungsfall |
Standardkonstruktor | Keine | Objekte werden erst später gefüllt |
Parametrisiert (teilweise) | Einige | Wichtige Werte setzen, andere auf Default |
Parametrisiert (vollständig) | Alle | Objekt soll sofort komplett nutzbar sein |
Wie verkettet man Konstruktoren mit this()?
Um doppelten Code zu vermeiden, kannst du Konstruktoren verketten. Mit `this()` rufst du einen anderen Konstruktor der gleichen Klasse auf. Das macht deinen Code sauberer und leichter zu warten, denn die eigentliche Logik steht nur an einer Stelle (meist im Konstruktor mit den meisten Parametern).
public class Auto {
String farbe;
int ps;
String marke;
// Hauptkonstruktor mit allen Parametern
Auto(String pFarbe, int pPs, String pMarke) {
this.farbe = pFarbe;
this.ps = pPs;
this.marke = pMarke;
}
// Ruft den Hauptkonstruktor auf
Auto(String pFarbe, int pPs) {
this(pFarbe, pPs, "Unbekannt");
}
// Ruft den zweiten Konstruktor auf
Auto(int pPs) {
this("weiss", pPs);
}
}Wichtig: `this()` muss immer die erste Anweisung im Konstruktor sein. Sonst gibt es einen Compiler-Fehler, da das Objekt nicht initialisiert werden kann, bevor Code davor ausgeführt wurde.
Merke: Mit `this()` verkettest du Konstruktoren und vermeidet doppelten Initialisierungscode. Das erhöht die Wartbarkeit deiner Klassen.
Was sind typische Anfängerfehler?
In der Praxis - egal ob im Studium oder im ersten Job - tauchen immer wieder die gleichen Fehler auf. Achte auf diese Punkte, um Zeit beim Debuggen zu sparen.
Fehler 1: Einen Rückgabetyp angeben
Das ist der Klassiker. Du denkst, ein Konstruktor sei eine Methode, vergisst aber, dass er keinen Typ hat.
// FALSCH - das ist eine normale Methode, kein Konstruktor
public void Auto(String pFarbe) {
this.farbe = pFarbe;
}
// RICHTIG - kein Rueckgabetyp
public Auto(String pFarbe) {
this.farbe = pFarbe;
}Warum ist das gefährlich? Java kompiliert das "Falsche" ohne Fehler, weil es eine ganz normale Methode sieht. Aber beim `new Auto(...)` wird deine Methode ignoriert und der Standardkonstruktor genutzt, der deine Werte nicht setzt.
Fehler 2: Name stimmt nicht mit Klasse überein
Java ist case-sensitive (Groß-/Kleinschreibung).
public class Auto {
// FALSCH - Konstruktor heisst nicht wie die Klasse
public auto(String pFarbe) {
this.farbe = pFarbe;
}
}Auch hier passiert das Gleiche wie bei Fehler 1: Es wird eine Methode erstellt, aber kein Konstruktor.
Fehler 3: this() nicht als erste Anweisung
Versuch nicht, Logik vor den `this()`-Aufruf zu packen.
Auto(String pFarbe) {
System.out.println("Starte..."); // KOMPILERFEHLER
this(pFarbe, 100);
}Lösung: Wenn du Logik vor dem Aufruf brauchst, verschiebe sie in den Zielkonstruktor oder nutze statische Methoden zur Berechnung der Parameter.
Übungsaufgabe für dich
Nimm dir 15 Minuten Zeit und schreibe eine Klasse `Schueler` mit folgenden Eigenschaften: `name` (String), `alter` (int), `klasse` (String).
Erstelle drei Konstruktoren:
Einen parameterlosen, der "Unbekannt", 0 und "Keine Klasse" setzt.
Einen, der nur Name und Alter nimmt.
Einen, der alle drei Werte nimmt.
Verwende `this()`, um Code-Duplizierung zu vermeiden. Wenn du das hinbekommst, hast du das Konzept des Java Konstruktor solid verstanden.
Für mehr Details zur offiziellen Spezifikation kannst du in die Oracle Java Tutorials schauen.
FAQ: Häufige Fragen zu Java Konstruktoren
Kann ein Konstruktor einen Rückgabewert haben?
Nein. Ein Konstruktor hat keinen Rückgabetyp - nicht einmal `void`. Er gibt implizit die Referenz auf das neu erstellte Objekt zurück. Schreibst du `void` davor, wird aus dem Konstruktor eine ganz normale Methode, die beim Instanziieren ignoriert wird.
Wann brauche ich einen eigenen Konstruktor?
Sobald deine Objekte bei der Erstellung zwingend bestimmte Werte brauchen, um gültig zu sein. Ein `Bankkonto` ohne Kontonummer oder Guthaben macht meist keinen Sinn. Hier erzwingst du diese Werte über einen parametrisierten Konstruktor. Für einfache Datenträger (Data Transfer Objects) reicht oft der Standardkonstruktor.
Was ist der Unterschied zwischen Konstruktor und Methode?
Ein Konstruktor wird nur einmalig bei der Erzeugung mit `new` aufgerufen. Er hat keinen Rückgabetyp und heißt wie die Klasse. Eine Methode hat immer einen Rückgabetyp (auch `void`), kann beliebig oft aufgerufen werden und führt Logik auf schon existierenden Objekten aus.
Kann ich private Konstruktoren schreiben?
Ja, das ist sogar ein wichtiges Muster (z.B. beim Singleton-Pattern oder Utility-Klassen). Ein `private` Konstruktor verhindert, dass Instanzen von außen erstellt werden. So stellst du sicher, dass nur die Klasse selbst ihre Objekte kontrolliert erzeugen kann.
Was passiert, wenn ich keinen Konstruktor schreibe?
Java erstellt automatisch einen parameterlosen Standardkonstruktor, der alle Felder auf Standardwerte setzt (`0`, `null`, `false`). Sobald du jedoch einen eigenen Konstruktor definierst, verschwindet dieser automatische Standardkonstruktor sofort.
Fazit
Der Java Konstruktor ist dein wichtigstes Werkzeug, um Objekte direkt bei ihrer "Geburt" in einen definierten Zustand zu versetzen. Du kennst jetzt den Unterschied zwischen Standard- und parametrisierten Konstruktoren, weißt, wie Überladung funktioniert, und wie du mit `this()` Code-Duplizierung vermeidest.
Wenn du das Prinzip einmal verstanden hast, gehört es zu den Grundlagen, die du in jedem Java-Projekt brauchst - egal ob in der Ausbildung, im Studium oder im Beruf.
Wenn du bei Java oder anderen IT-Themen Unterstützung brauchst - ob für die Prüfungsvorbereitung, ein Projekt im Studium oder den Berufseinstieg - schau dir study-it.education an. Dort findest du individuelle Online-Nachhilfe, die genau auf deine Situation zugeschnitten ist.
1:1-Hilfe zu diesem Thema?
Brauchst du jemand, der das mit dir durchgeht?
Statt nochmal lesen: 30 min mit einem Senior-Dev.
Kostenloses Erstgespräch buchen →
Lerne, wie Java Konstruktoren funktionieren und wie du als Einsteiger, Azubi oder Student damit Objekte sauber initialisierst.
marcel.schmidtpeter@study-it.education →Mehr Lesestoff
Java innere Klassen: Wann und warum? Einfach erklärt
Innere Klassen strukturieren Java-Code sauberer. Dieser Guide erklärt Azubis, Studenten und Einsteigern, wann und warum man sie einsetzt.
Java Main Methode: public static void main einfach erklärt
Einfache Erklärung der Java Main Methode für Azubis, Studenten und Berufseinsteiger. Verstehen Sie public static void main Schritt für Schritt.
Java StringBuilder vs String: Wann nutzen?
Lernen Sie den Unterschied zwischen String und StringBuilder in Java kennen. Effizient programmieren für Azubis, Studenten und Berufseinsteiger.