Sie sind auf Seite 1von 5

In jeder objektorientierten Programmiersprache lassen sich spezielle Methoden definieren, die bei der Initialisierung eines Objekts aufgerufen

werden: die Konstruktoren. Das Java Laufzeitsystem legt automatisch einen Standardkonstruktor an wenn kein klassenspezifischer Konstruktor implementiert wird. Konstruktoren haben die folgende Eigenschaften Der Konstruktor hat immer den Namen der Klasse als Methodenname Konstruktoren haben keine Rckgabewerte (auch kein Schlsselwort void!) Die Auswahl des passenden Konstruktur erfolgt ber die Typen der Eingabeparameter Konstruktoren knnen auch parameterlos sein Besitzt eine Klasse einen Konstruktor, so muss einer der Konstruktoren benutzt werden. Man kann die Klasse dann nicht mehr mit dem trivialen (System-)Konstruktor initialisieren.

Konstruktoren mit Parametern Konstruktoren knnen wie Methoden bergabeparameter enthalten. Sie werden vom new() Operator erfasst, der dann nach dem Initialisieren der Datenstrukturen den entsprechenden Konstruktor aufruft. Punkt p1 = new Punkt (3.3, 4.1); Hier wird ein Konstruktor der Klasse Punkt aufgerufen der folgende Methodenparameter hat class Punkt { private double x; private double y; public Punkt (double xKoord, double yKoord) { x = xKoord; y = yKoord; } } Das Schreiben von Konstruktoren ist optional. Es knnen mehrere Konstruktoren implementiert werden. Alle Konstruktoren mssen sich jedoch in der Parameterliste unterscheiden. Hier zhlt die Reihenfolge und Anzahl der

Parametertypen, jedoch nicht der Name der Parametervariablen. Der bersetzer braucht diese Information um die unterschiedlichen Konstruktoren auszuwhlen. berladene Konstruktoren berladen von Methoden und Konstruktoren - Das Implementieren von mehreren namensgleichen Methoden oder Konstruktoren mit unterschiedlichen Eingabe-Parameterlisten nennt man berladen. Java unterscheidet die unterschiedlichen Methoden und Konstruktoren an den Eingabelisten der Parameter jedoch nicht am Rckgabeparameter! Es kann sehr ntzlich sein mehrere Konstruktoren zur Initialisierung einer Klasse zur Verfgung zu stellen wie man am Beispiel der Klasse Punkt sehen kann. Die Klasse Punkt erlaubt hier die folgenden Initialisierungsarten: Initialisierung mit Nullpunkt(0,0) Initialisierung mit x,y Koordinate Initialisierung mit den Werten eines anderen Punkts class Punkt { private double x; private double y; public Punkt (double xKoord, double yKoord) { x = xKoord; y = yKoord; } public Punkt (Punkt p) { this(p.x,p.y);} public Punkt () { this(0,0); } } ... Punkt p1 = new Punkt(); // Initialisierung mit (0,0) Punkt p2 = new Punkt(1.1,2.2); // Initialisierung mit (1.1,2.2) Punkt p3 = new Punkt(p2); // Initialisierung mit (1.1,2.2) durch Punkt p2 ...

Der Default-Konstruktor (ohne Parameter) wurde hier selbst implementiert. Er ruft mit Hilfe des Schlsselworts this den Konstruktor mit den beiden Fliesskommazahlen als Parameter auf. Er initialisiert die Datenstruktur nicht selbst, sondern er delegiert die Initialisierung an einen anderen Konstruktor. Dies ist nicht notwendig aber blich. Ein Konstruktor ist die erste Methode die ein Objekt initialisiert. Das ist aber nicht mehr fr den aufgerufenen Konstruktor gehrleistet, wenn dem aufrufenden Konstruktor schon Objektmanipulationen vor dem this() Aufruf erlaubt sind. Regeln zum Aufruf von Konstruktoren Java stellt einen Standardkonstruktor (Default-Konstruktor) ohne Parameter zur Verfgung der alle Attribute mit Standardwerten belegt. Implementiert man eigene Konstruktoren gelten die folgenden Regeln fr die Benutzer von Konstruktoren: Wurde kein Konstruktor implementiert, generiert Java einen Default-Konstruktor ohne Parameter. Wird mindestens ein Konstruktor selbst implementiert so generiert Java zur Laufzeit keinen Standardkonstruktor. Benutzer mssen einen der selbst implementierten Konstruktoren verwenden. Wird ein Konstruktor ohne Parameter implementiert wird dieser anstatt eines Standardonstruktor benutzt, da er fr den Anwender die gleiche Syntax hat. Dieses Vorgehen ist notwendig um eine Datenkapselung zu erzwingen. Bei einer Implementierung mit eigenen Konstruktoren aber ohne einen Default-Konstruktor fhrt der folgende Konstruktoraufruf zu einem bersetzungsfehler: class Punkt { private double x; private double y; public Punkt (double xKoord, double yKoord) {...} public Punkt (Punkt p) { this(p.x,p.y);} ... }

... Punkt p1 = new Punkt(); // Initialisierung mit Default-Konstruktor ist nicht mglich ... Erklrung der von Java geforderten Semantik: Hat ein Entwickler keinen Konstruktor implementiert, so war ihm die Initialisierung des Objekts nicht wichtig. Das Objekt wird von einem automatisch generierten Konstruktor mit Nullwerten initialisiert Der Standardkonstruktor wird benutzt wie ein Konstruktor ohne Parameter Hat der Entwickler mindestens einen Konstruktor selbst implementiert, so ist eine spezielle Initialisierung des Objekts gewnscht Ein Konsument muss das Objekt mit Hilfe einer der selbstimplementierten Konstruktoren initialisieren Wrde das Java einen zustzlichen Standardkonstruktor generieren knnte man die vom Entwickler gewnschte Initialisierung umgehen. Dies ist nicht gewnscht.

NU E SIGUR CA SCRIU(Verbieten des Instanziieren von Objekten einer Klasse Java bietet die Mglichkeit einen Konstruktor als private zu deklarieren. Hiermit kann niemand ausserhalb der Klasse Instanzen erzeugen. Diese Mglichkeit erlaubt die Anzahl von Instanzen bei Bedarf genau zu kontrollieren. Ein Anwendungsfall ist ist das Benutzen einer statischen Methode und eines privaten Kontruktors: class Punkt { private double x; private double y; public static Punkt createPunkt (double xKoord, double yKoord) { Punkt pp = new Punkt(xKoord, yKoord); return pp; }

private Punkt (double xx, double yy) { x=xx; y=yy;} } ... Punkt p1 = Punkt.createPunkt(1.1,2.2); Punkt p2 = new Punkt(4.4, 5.5); // Fehler!! ... )