Java Konstruktor
In diesem Artikel erklären wir dir den Java Konstruktor und wie er aufgebaut ist. Zusätzlich lernst du, wie du mit ihm ein neues Objekt einer Klasse erstellst.
Falls du keinen langen Text lesen möchtest, haben wir dir das alles zum Java Konstruktor in diesem Video zusammengefasst.
Inhaltsübersicht
Java Konstruktor einfach erklärt
In einer Klasse ist der Java Konstruktor eine Methode, die den gleichen Namen wie die Klasse hat. Sie wird dazu verwendet, ein neues Objekt dieser einen Klasse zu erstellen. Das ist der Grund, weshalb jede Klasseninstanz einen Konstruktor haben muss.
Programmierst du ihn nicht selbst, so erstellt der Compiler des Programms Java automatisch einen sogenannten Standardkonstruktor. Dabei ist die Methode ohne Parameter und hat keinen Inhalt. Ebenfalls kannst du den speziellen Konstruktor nicht sehen, da er nur im Hintergrund abläuft.
Java Standardkonstruktor
Der Standardkonstruktor einer Klasse Tier würde wie folgt aussehen:
public class Tier{
private String art;
private String name;
public Tier(){
}
}
Zusätzlich haben wir noch die Attribute Art und Name des Types String mitprogrammiert. Diese brauchen wir später. Der Java Konstruktor wird immer mit dem Modifier public versehen, da du von außerhalb der Klasse auf die Methode zugreifen möchtest, um ein Objekt zu erzeugen. Dieser Vorgang wird auch als Instanzierung bezeichnet. Außerdem gibt die Methode nichts zurück.
Beispielhaft würde die Instanzierung aus einer Main Methode unserer Klasse Tier wie folgt aussehen:
public class Mitmain{
public static void main(String[] args){
Tier hund = new Tier();
}
}
Nun kannst du nicht nur einen leeren Standardkonstruktor aufrufen, sondern diesem auch Startwerte mitgeben. Damit hätte dann dein neues Objekt gleich ein paar Werte zur weiteren Bearbeitung zur Verfügung. Hierfür musst du jedoch selbst einen spezifischen Java Konstruktor schreiben und kannst nicht mehr den Standardkonstruktor verwenden. Schauen wir uns einmal an, wie das dann aussieht.
Konstruktor Java
Nehmen wir an, du möchtest die Tierart Vögel programmieren. So kannst du bereits dem Konstruktor den Wert „Vögel“ aus der Main Methode übergeben. Damit musst du deinen Standardkonstruktor erweitern, sodass er Parameter entgegen nehmen kann.
Der Aufruf zur Instanzierung und zur Speicherung des neuen Objekts in der Variablen vögel
wäre dabei folgender:
Tier vögel = new Tier("Vögel");
Damit wird der String Vögel
mitgegeben. Nun sucht das Programm nach dem passenden Konstruktor in der Klasse Tier
. Hier wird nach einer Methode gesucht, die Tier heißt und einen Parameter des Types String
verarbeiten kann.
Der Name und die Parameter, welche die Methode bekommen kann, werden auch Signatur einer Methode genannt. Die Signatur muss immer eindeutig sein, das bedeutet, sie darf es nur einmal in einer Klasse geben. Wenn du mehr von Java Methoden und deren Signatur wissen möchtest, dann schau dir doch unser Video zu den Java Methoden an.
In unserem Beispiel würde der Konstruktor sich wie folgt verändern:
public class Tier{
private String art;
private String name;
public Tier(String art){
this.art = art;
}
}
Das ist der zur Instanziierung passende Java Konstruktor. Damit kannst du einen String Wert bei der Instanziierung übergeben.
Mit dem Befehl:
this.art = art;
sorgst du lediglich dafür, dass die Variable art
der Klasse von der zweiten Zeile gleich dem übergebenen Parameter art
ist.
Überladen von Konstruktoren
Wie bei normalen Methoden , kann auch die Konstruktormethode überladen werden. Schauen wir uns wieder ein Beispiel an. Angenommen du möchtest ein Objekt Vögel und ein Objekt Säugetiere programmieren. Weiterhin gehen wir davon aus, dass du den Namen, des Säugetiers schon kennst. Es soll ein Mensch sein. Von dem Vogel hingegen weißt du keinen Namen, weshalb die entsprechende Variable auf unbekannt gesetzt werden soll.
In Java kannst du das folgendermaßen instanzieren:
public class Mitmain{
public static void main(String[] args){
Tier vögel = new Tier("Vögel");
Tier säugetier = new Tier("Säugetier", "Mensch");
}
}
Der Code für den Java Konstruktor könntest du so umsetzen:
public class Tier{
private String art;
private String name;
//Konstruktor I
public Tier(String art){
this.art = art;
this.name = "unbekannt";
}
//Konstruktor II
public Tier(String art, String name){
this.art = art;
this.name = name;
}
}
Damit hättest du deinen Konstruktor überladen. Du benutzt zweimal den gleichen Methodenaufruf, in dem Fall Tier()
, jedoch durch die unterschiedlichen Parameter zwei unterschiedliche Signaturen. Deshalb wird für die Vögel der erste und für das Säugetier der zweite Konstruktor angesprochen.
Mit der Referenz this.
zeigst du dem Programm an, dass du dich auf eine Klassenvariable beziehst. Also die Variable, die du am Anfang der Klasse
im Bereich der Eigenschaften und Attribute deklariert hast.
Verketteter Konstruktor mit this
Nun kannst du nicht nur Java Konstruktoren einzeln ansprechen, sondern auch miteinander verketten. Dies funktioniert mit dem Aufruf this()
. Du musst allerdings drauf aufpassen, dass so ein Aufruf zum verketten, die erste Anweisung in einem Konstruktor sein muss.
Die Verkettung benutzt du, um in deinem Programm keinen überflüssigen Code zu haben und nichts zweimal schreiben zu müssen. Wenn du unseren Konstruktor I und II anschaust, erkennst du, dass hier eigentlich zweimal das gleiche passiert. Es werden die Variablen Art und Name mit unterschiedlichen Parametern belegt.
Das könntest du jetzt durch eine Verkettung wie folgt vereinfachen:
public class Tier{
private String art;
private String name;
//Konstruktor I
public Tier(String art){
this(art, "unbekannt");
}
//Konstruktor II
public Tier(String art, String name){
this.art = art;
this.name = name;
}
}
Die Main-Methode und der Aufruf zur Klasseninstanziierung bleibt dabei der Gleiche.
Vorausgesetzt, du weißt die Art deines Tieres, welches du programmieren möchtest. Der Name ist dir aber anfangs unbekannt. So rufst du bei der Instanziierung den Java Konstruktor I auf und übergibst den String-Wert art.
In unserem oberen Beispiel wäre das
Tier vögel = new Tier("Vögel");
Nun verweist der Konstruktor I durch den this(art, "unbekannt");
Aufruf auf den Konstruktor II. Dabei gibt der Aufruf den String unbekannt
für den zweiten Konstruktor mit. Das entspricht dann dem Namen des Tieres, welche dem Parameter name
übergeben wird. Denn name
ist der zweite Parameter des Konstruktors II.
So hast du zwei Konstruktoren miteinander verknüpft und keinen Programmcode doppelt geschrieben.
Java Methoden
Damit du ein richtiger Java-Profi wirst, solltest du dir unbedingt auch noch unser Video zu den Methoden anschauen. Viel Spaß!