Konstruktor: Unterschied zwischen den Versionen
Hauer (Diskussion | Beiträge) |
|||
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Ein '''Konstruktor''' ist eine besondere Methode von Klassen. | + | Ein '''Konstruktor''' ist eine besondere [[Methode]] von [[Klasse|Klassen]]. Er kann nur in Kombination mit dem [[Schlüsselwort]] '''new''' aufgerufen werden. |
− | + | Beim Aufruf des '''Konstruktors''' werden auf dem [[Heap (Speicher)]], also dem Speicherbereich für Objekte, genug [[Bytes]] für genau ein neues [[Objekt]] der entsprechenden Klasse reserviert und eine Referenz auf dieses neue Objekt zurückgegeben. Der '''Konstruktor''' hat nun die Aufgabe, das entsprechende Objekt zu initialisieren. Dabei werden dem Konstruktor meistens Parameter übergeben, um die initialen Werte des neuen Objektes zu spezifizieren oder durch im Konstruktor stattfindende Berechnungen zu erzeugen. | |
+ | |||
+ | = Syntaxdiagramm = | ||
[[Datei:constructor_declaration.png]] | [[Datei:constructor_declaration.png]] | ||
− | === | + | = Verwendung = |
+ | |||
+ | Ein '''Konstruktor''' trägt immer denselben Namen wie die ihn enthaltende Klasse und besitzt ''keinen'' [[Methode#Rückgabe|Rückgabetyp]], auch nicht [[void]]! Dem Namen folgen wie üblich runde Klammern, in denen die Parameterliste des Konstruktors definiert wird. Die [[Modifikator|Sichtbarkeit]] eines Konstruktors zu spezifizieren ist optional. | ||
+ | |||
+ | Wird ein Attribut während der Initialisierung des Objektes durch den Konstruktor nicht explizit gesetzt, so hat es im Falle eines [[boolean]]s den Wert '''false''', im Falle einer numerischen Variable den Wert '''0''' und im Falle einer Objektreferenz den Wert '''[[null]]'''. Dies gilt natürlich nicht, wenn in der Deklaration der Variablen ihr initialer Wert direkt durch eine [[Variable#Zuweisung|Zuweisung]] festgelegt wird. In diesem Falle nimmt die Variable vor Ausführung des Konstruktors diesen Wert an, der Konstruktor kann ihn aber natürlich noch nachträglich ändern. Dies ist natürlich bei [[final]]en Attributen nicht der Fall. | ||
+ | |||
+ | = Defaultkonstruktor = | ||
+ | |||
+ | Wird ''kein'' Konstruktor in einer Klasse spezifiziert, so existiert dennoch ein sogenannter '''Defaultkonstruktor''', oder '''Standardkonstruktor'''. Dieser besitzt keine Parameter und initialisiert kein Attribut, wodurch alle Attribute entweder mit false, 0, null oder ihrem initialen Wert bei Deklaration initialisiert werden. | ||
+ | |||
+ | = Beispiele = | ||
− | Ein | + | Ein Quader kann folgendermaßen initialisiert werden: |
− | + | <source lang="java"> | |
+ | public class Cuboid { | ||
+ | private double width; | ||
+ | private double height; | ||
+ | private double length; | ||
− | = | + | public Cuboid(double width, double height, double length){ |
+ | this.width = width; | ||
+ | this.height = height; | ||
+ | this.length = length; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
− | + | Die Namen der Attributvariablen werden durch die lokalen Variablen des Konstruktors überschattet. Die Attribute müssen im Konstruktor deswegen mit dem Schlüsselwort [[this]] referenziert werden. Dies hilft außerdem, die Semantik des Konstruktors zu verdeutlichen, da die Attribute des Objektes direkt an diesen übergeben werden und deswegen denselben Namen tragen sollten. |
Aktuelle Version vom 26. Juli 2016, 15:29 Uhr
Ein Konstruktor ist eine besondere Methode von Klassen. Er kann nur in Kombination mit dem Schlüsselwort new aufgerufen werden.
Beim Aufruf des Konstruktors werden auf dem Heap (Speicher), also dem Speicherbereich für Objekte, genug Bytes für genau ein neues Objekt der entsprechenden Klasse reserviert und eine Referenz auf dieses neue Objekt zurückgegeben. Der Konstruktor hat nun die Aufgabe, das entsprechende Objekt zu initialisieren. Dabei werden dem Konstruktor meistens Parameter übergeben, um die initialen Werte des neuen Objektes zu spezifizieren oder durch im Konstruktor stattfindende Berechnungen zu erzeugen.
Inhaltsverzeichnis
Syntaxdiagramm
Verwendung
Ein Konstruktor trägt immer denselben Namen wie die ihn enthaltende Klasse und besitzt keinen Rückgabetyp, auch nicht void! Dem Namen folgen wie üblich runde Klammern, in denen die Parameterliste des Konstruktors definiert wird. Die Sichtbarkeit eines Konstruktors zu spezifizieren ist optional.
Wird ein Attribut während der Initialisierung des Objektes durch den Konstruktor nicht explizit gesetzt, so hat es im Falle eines booleans den Wert false, im Falle einer numerischen Variable den Wert 0 und im Falle einer Objektreferenz den Wert null. Dies gilt natürlich nicht, wenn in der Deklaration der Variablen ihr initialer Wert direkt durch eine Zuweisung festgelegt wird. In diesem Falle nimmt die Variable vor Ausführung des Konstruktors diesen Wert an, der Konstruktor kann ihn aber natürlich noch nachträglich ändern. Dies ist natürlich bei finalen Attributen nicht der Fall.
Defaultkonstruktor
Wird kein Konstruktor in einer Klasse spezifiziert, so existiert dennoch ein sogenannter Defaultkonstruktor, oder Standardkonstruktor. Dieser besitzt keine Parameter und initialisiert kein Attribut, wodurch alle Attribute entweder mit false, 0, null oder ihrem initialen Wert bei Deklaration initialisiert werden.
Beispiele
Ein Quader kann folgendermaßen initialisiert werden:
public class Cuboid { private double width; private double height; private double length; public Cuboid(double width, double height, double length){ this.width = width; this.height = height; this.length = length; } }
Die Namen der Attributvariablen werden durch die lokalen Variablen des Konstruktors überschattet. Die Attribute müssen im Konstruktor deswegen mit dem Schlüsselwort this referenziert werden. Dies hilft außerdem, die Semantik des Konstruktors zu verdeutlichen, da die Attribute des Objektes direkt an diesen übergeben werden und deswegen denselben Namen tragen sollten.