Initialisierungsblöcke
Ziele
- Ich kann in eigenen Worten den Unterschied zwischen statische- und nicht-statische Initialisierungsblöcke erklären.
- Ich kann den Zweck erörtern, welcher Initialisierungsblöcke erfüllen.
Initialisierungsblöcke
Neben Konstruktoren gibt es noch zwei weitere Konstrukte, die der Initialisierung dienen. Statische und nicht-statische Initialisierungsblöcke. Diese sehen wie folgt aus:
|
|
Innerhalb dieser Initialisierungblöcke können ähnlich wie bei den Konstruktoren bestimmte Initialisierungen durchgeführt werden. Initialisierungsblöcke sind dann nützlich, wenn z.B. bei der Erstellung eines Objekts gewisser Code noch vor der Ausführung des Konstruktors als Vorbereitung ausgeführt werden muss.
Grundsätzlich können die beiden Blöcke beliebigen Programmcode enthalten. Die Reihenfolge bei der Erstellung eines neuen Objekts ist wie folgt:
- Statische Variablen
- Statische Initialisierungblöcke
- Instanzvariablen
- Instanzblöcke
- Konstruktoren
Eine Java-Klasse kann beliebig viele statische und nicht-statische Initialisierungsblöcke aufweisen. Die Reihenfolge des Aufrufs bei mehreren Blöcken richtet sich nach der Reihenfolge der Implementation (sprich, die oberen Blöcke werden zuerst ausgeführt).
Beispiel
Folgendes Beispiel braucht einen statischen Initialisierungsblock, um eine Default-Waffe auszuwählen, die als Default für alle Ninjas gilt. In einem Instanzblock wird die Instanzvariable weapon
gleich diesem Default-Wert gesetzt, damit das nicht in jedem Konstruktor (stelle dir vor, es gäbe viele davon) gemacht werden muss, wo die weapon
nicht gesetzt wird.
|
|