This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. # Konstruktor Ein Konstruktor wird benötigt, um einem Objekt einer Klasse unmittelbar bei seiner Erzeugung initiale Werte zuzuweisen. Diese Werte müssen bei der Erzeugung des Objekts natürlich irgendwie mitgegeben werden. Schau dir folgendes Beispiel an. Ab Zeile 5 wird in der Klasse `Student` der **Konstruktor** implementiert. Die Syntax ist die folgende: Der Klassen-Name (im Beispiel `Student`) wird nochmals aufgerufen. **Ohne Schlüsselwörter. Einfach nur der Klassen-Name**. Diesem Aufruf werden **Argumente** übergeben. Mit diesen Argument werden in den Zeilen 6 und 7 jeweils **Klassen-Atrribute** initialisiert. Entsprechend müssen natürlich auch die Datentypen bei der Übergabe an den Konstruktor mit den Datentypen der Attribute übereinstimmen. Klar. In der `Main` wird nun in Zeile 5 ein Objekt der Klasse `Student` erzeugt. Diesmal werden aber beim Aufruf gleich die Initialwert mit übergeben. Ein späteres Setzen dieser Werte ist nicht notwendig. \<WRAP group\> \<WRAP half column\> ``` java class Student { private final String name; private int age; public Student(String name, int age){ this.name = name; this.age = age; } public void display() { System.out.println("name: "+this.name); System.out.println("age: "+this.age); } } ``` \</WRAP\> \<WRAP half column\> ``` java public class Main{ public static void main(String args[]) { Student obj1 = new Student("Maria", 32); obj1.display(); } } ``` \</WRAP\> \</WRAP\> ## Konstruktor oder setter-Methode Natürlich fragst du dich jetzt, ob wir nicht im Abschnitt über getter- und setter-Methoden gelernt haben, dass wir `private`-Attribute von außen abkapseln. Wie passt das jetzt mit dem **Konstruktor** zusammen, der ja doch wieder die Attribute einfach setzt? Zunächst wird der Code im Zweifel nicht so einfach wie im Beispiel sein. Checks können natürlich auch den Konstruktor mit eingebaut werden. Vielleicht ist dir ja in der Klasse `Student` das Schlüsselwort `final` aufgefallen. Es besagt, dass ein Attribut zur Lebenszeit eines Objekt unter keinen Umständen mehr geändert werden darf. Gleichzeitig wollen wir sicherstellen, dass für ein Attribut auf jeden Fall ein konkreter Wert eingetragen wird. Kurz gesagt: Mit einem Konstruktor können wir Attribute, an die wir auch mit einer **setter-Methode** nicht herankämen **einmalig** setzen - nämlich während der **Instanzierung**. Gleichzeitig kann diese Erzeugung nicht passieren, ohne dass bestimmte Werte übergeben werden. |Setter Methoden | Konstruktor| |---------------------------------------------------------------|--------------------------------------------------------------------------------------| |Der Wert einer Variable kann sich zur Laufzeit ändern | Der Wert ändert sich nicht. Er ist **immutable**| |Validierungs-Logik wird benötigt, bevor ein Wert gesetzt wird | Sicherstellen, dass bestimmte Attribute ganz sicher zur creation time gesetzt werden| |Werte werden nach der Initialisierung gesetzt | Wert der Variablen soll sich nach der Initialisierung nicht mehr ändern|