Java am Gymnasium in Bayern Wiki
Advertisement

Ein Konstruktor dient zur Erzeugung eines Objektes einer Klasse.

Somit ist ein Konstruktor eine besondere Methode in der Klasse, denn für alle gewöhnlichen Methoden der Klasse benötigt man zunächst ein Objekt dieser Klasse. Die Methode Lenken macht keinen Sinn, solange es noch kein Objekt der Klasse Auto gibt.

Eigenschaften eines Konstruktors[]

  • Der Bezeichner des Konstruktors ist gleich dem Namen der Klasse. Hierbei sollte man sicherstellen, dass man die beiden auch völlig gleich geschrieben hat (Achtung auf Groß und Kleinschreibung).
  • Ein Konstruktor weist bei der Erzeugung des Objektes den Attributen gewünschte Start-Werte zu.
  • Ein Konstruktor hat keinen Ausgabe-Parameter (genau genommen ist das erzeugte Objekt der Ausgabe-Parameter), aber beliebig viele Eingabe-Parameter.
  • Es kann verschiedene Konstruktoren mit verschiedenen Parameterlisten für eine Klasse geben. Meist gibt es mindestens einen Standard-Konstruktor bei dem alle Attribute mit Standard-Werte belegt werden und einen Konstruktor bei dem der Benutzer alle Attribute mit selbstgewählten Werten belegen kann. Siehe diese beiden Varianten weiter unten.
  • Wird kein Konstruktor in das Programm geschrieben, geht Java von einem Standard-Konstruktor ohne Code aus und verwendet diesen beim Erzeugen von Objekten.

Konstruktor-Definition in Java[]

Allgemein ist eine Klasse mit Konstruktor folgendermaßen aufgebaut:

class Klassenname {

// Attributs-Deklarationen


Klassenname (Parameterliste) {
// Code für den Konstruktor
}


// Code für die restlichen Methoden

}

Beispiel für eine leere Klasse mit leerem Konstruktor:

class Leer {

Leer () {
}

}

In dieser Klasse ohne Attribute muss der Konstruktor natürlich auch keine Werte zuweisen. Im Folgenden geht es um Konstruktoren, die den Attributen der Klasse durchaus Werte zuweisen.

Konstruktor programmieren[]

Wie oben bereits erwähnt wird der Konstruktor verwendet, um den Attributen gewünschte Start-Werte zuzuweisen. Diese Zuweisung funktioniert wie immer in Java (Siehe Wert-Zuweisung von Variablen). Da hier den Attributen ein Wert zugewiesen wird, verwendet man das Schlüsselwort this zum Zugriff auf die Attribute.

Code:

this.Attributname = Wert;

Beispiel:

this.Kontostand = 100.0;

Anmerkung: Immer wenn man auf das Attribut der eigenen Klasse zugreifen will, schreibt man this.Attributname. Auf diese Weise vermeidet man eine Verwechslung mit anderen Variablen von kürzerer Lebensdauer.

Man schreibt keinen Datentyp vor diese Zuweisung, die Attribute sind bereits deklariert und kennen ihren Datentyp bereits. Man muss diesen danach nicht mehr angeben.

Man unterscheidet die Attribute in zwei Gruppen:

  • Attribute mit gleichem Start-Wert für alle Objekte dieser Klasse.
  • Attribute mit unterschiedlichen Start-Werten für die Objekte dieser Klasse.

Die Unterscheidung ist ganz einfach: In der Klasse Konto ist der Kontostand etwas das einen gleichen Start-Wert für alle Konto-Objekte, nämlich 0.0 Euro. Die KontoNr dagegen ist ein Attribut, das schon bei der Erzeugung eines Konto-Objektes für jedes Konto verschieden sein sollte. Auch bei Personen-Objekten gibt es beide Varianten. Das Attribut Name eines Studenten sollte schon bei der Erzeugung des Objektes verschieden sein, das Attribut UniAbschluss kann bei allen Studenten den Start-Wert "keiner" haben.

Attribute mit gleichem Startwert[]

Bei Attributen mit dem gleichen Start-Wert für alle Objekte dieser Klasse weist man einfach diesen Start-Wert zu.

Code Allgemein:

this.Attributname = Wert;

Code im Beispiel Kontostand:

this.Kontostand = 0.0;

Attribute mit unterschiedlichen Start-Werten[]

Bei Attributen mit unterschiedlichen Start-Werten muss man die Werte als Eingabe-Parameter verlangen. Beim Aufruf der Konstruktor-Methode werden dann erst die Werte für die Parameter angegeben. Wird beispielsweise in der Konstruktor-Methode der Klasse Konto der Parameter StartKontoNr angegeben, so weist man dem KontoNr-Attribut eben diesen Variablen-Wert zu.

Code Allgmein:

this.Attributsname = Eingabe-Parameter-Bezeichner

Code im Beispiel KontoNr:

this.KontoNr = StartKontoNr

Sonstiges:[]

Ansonsten kann innerhalb eines Konstruktors fast jeder andere Java-Code stehen. Es können auch komplexere Berechnungen, Schleifen oder Verzweigungen innerhalb der Konstruktor-Definition stehen. Bei der Vererbung kann selbstverständlich auch auf den Konstruktor der Oberklasse zugegriffen werden.

Zusammengefasstes Konto-Beispiel[]

KlassenkarteKontoVorwiegendAttribute

Die Klassenkarte Konto mit ihren Attributen. Die meisten Methoden wurden hier weggelassen.

Im Beispiel der Klasse Konto sieht das Ganze folgendermaßen aus:

class Konto {

//Attribute
int KontoNr;
double Kontostand;
double Zinssatz;
double MinimalerKontostand;
char Typ;
boolean Gesperrt;
String Inhaber;


//Konstruktor mit Standard-Werten
Konto() {
this.KontoNr = 1234567;
this.Kontostand = 0.0;.
this.Zinssatz = 0.02;
this.MinimalerKontostand = -500.0;
this.Typ = 'G';
this.Gesperrt = false;
this.Inhaber = "Maria Musterfrau";
}


//Konstruktor mit rein benutzerdefinierten Werten
Konto(int StartKontoNr, double StartKontostand, double StartZinssatz, double StartMinimalerKontostand, char StartTyp, boolean StartGesperrt, String StartInhaber)
{
this.KontoNr = StartKontoNr;
this.Kontostand = StartKontostand
this.Zinssatz = StartZinssatz;
this.MinimalerKontostand =StartMinimalerKontostand;
this.Typ = StartTyp;
this.Gesperrt = StartGesperrt;
this.Inhaber = StartInhaber;
}


//Sinnvoller Konstruktor gemischt mit sowohl Standard-Werten als auch benutzerdefinierten Werten
Konto(int StartKontoNr, double StartZinssatz, double StartMinimalerKontostand, char StartTyp, String StartInhaber)
{
this.KontoNr = StartKontoNr;
this.Kontostand = 0.0;
this.Zinssatz = StartZinssatz;
this.MinimalerKontostand =StartMinimalerKontostand;
this.Typ = StartTyp;
this.Gesperrt = false;
this.Inhaber = StartInhaber;
}


// Restliche Konto-Methoden

} In diesem Beispiel wurden zwei klassische Versionen von Konstruktoren in der Klasse Konto festgelegt:

Typische Konstruktor-Varianten[]

  1. Der Standard-Konstruktor 'ohne Eingabe-Parameter' weist jedem Attribut einfach einen Standard-Wert zu, auch Attributen wie Inhaber oder KontoNr, bei denen dies keinen großen Sinn hat. Er dient vor allem zum schnellen Erzeugen von Objekten, meist zu Zwecken des Programm-Tests.
  2. Der Konstruktor mit rein bentzerdefinierten Werten weist jedem Attribut genau einen Wert aus einem Eingabe-Parameter zu. Auf diese Weise kann man bei Erzeugung des Objektes jeden einzelnen Startwert der Attribute selbst bestimmen.
  3. Der sinnvolle Konstruktor weist manchen Attributen einen Standard-Wert zu und manch anderen Attributen einen benutzerdefinierten Wert.
Advertisement