Erzeugung |
von Objekten mit Konstruktor-Funktionen
|
|
|
Namenskonvention |
Konstruktorname = Klassenname
|
|
|
Aufgabe |
Initialisierung von Datenfeldern bei der
Erzeugung von Objekten
|
|
|
Beispiel |
class X {
private
int i;
public X() {
i = 24;
}
}
|
|
|
|
NIE uninitialisierte Variablen
problemspezifische Initialisierung wird erzwungen
|
|
|
default- Konstruktor |
Ist kein Konstruktor in einer
Klasse angegeben, so
wird ein
default-Konstruktor vom
Java-Compiler generiert.
In diesem werden alle Datenkomponenten mit den default-Werten initialisiert.
|
|
|
Beispiel |
class X {
private
int i;
}
|
|
ist gleichwertig zu
|
|
class X {
private
int i;
public X() {
i = 0;
}
}
|
|
|
Konstruktoren mit Parameter |
erlauben eine flexible Initialisierung
|
|
|
Beispiel |
class X {
private
int i;
public X(int i) {
this.i = i;
}
}
|
|
Aufruf
|
|
|
|
hier fehlerhaft
|
|
|
|
|
Überladen |
von Konstruktoren ist möglich |
|
Die Konstruktoren müssen sich aber in der Anzahl oder der Art der Parameter unterscheiden
|
|
|
Beispiel |
class X {
private
int i;
public X() {
i = 24;
}
public X(int i) {
this.i = i;
}
}
|
|
ist o.k.
|
|
Aufrufe
|
|
... new X(13) ...
... new X() ...
|
|
class X {
private
int i;
public X() {
i = 24;
}
public X() {
i = 42;
}
}
|
|
ist fehlerhaft
Konstruktoren sind im Aufruf nicht unterscheidbar
|
|
|
Variante |
Konstruktoren können andere Konstruktoren aufrufen
Vermeidung von Codeverdopplung
|
|
|
Beispiel |
class X {
private
int i;
public X() {
this(24);
}
public X(int i) {
this.i = i;
}
}
|
|
ist gleichwertig zu
|
|
class X {
private
int i;
public X() {
i = 24;
}
public X(int i) {
this.i = i;
}
}
|
|
|
|
Klassenvariablen werden üblicherweise nicht mittels Konstruktoren initialisiert,
können aber referenziert werden
|
|
|
Beispiel |
class X {
static
int numberOfXObjects = 0;
private
int i;
public X() {
++ numberOfXObjects;
}
}
|
|
zum Zählen der erzeugten Objekte für eine Klasse
|
|
|