Initialisierung von Klassenvariablen
Wo werden eigentlich Klassenvariablen initialisiert? Im Konstruktor ergibt dies keinen Sinn, da für Klassenvariablen keine Objekte angelegt werden müssen. Dafür gibt es den static{}-Block. Dieser wird immer dann ausgeführt, wenn der Klassenlader eine Klasse in die Laufzeitumgebung geladen hat. Für eine statische Initialisierung wird also wieder der Compiler etwas einfügen:
Was wir schreibenWas der Compiler generiertclass Beer {
static String isFreeFor = "Homer";
}class Beer {
static String isFreeFor;
static {
isFreeFor = "Homer";
}
}
Klassenintialisierer sind nicht ganz ungefährlich, denn wenn der Code eine Ausnahme auslöst, dann gibt es einen harten lang.ExceptionInInitializerError. Leser können das testen, in dem geändert wird:
static String isFreeFor = "Homer".substring( -1 );
und dann aus dem Hauptprogramm aufrufen:
out.println( Beer.isFreeFor );
2 Kommentare
Christian Ullenboom ·
Danke!
Klaus-Peter Budzinski ·
Klassenintialisierer sind nicht ganz ungefährtlich, denn wenn der Code eine Ausnahme das "t" bei ungefährtlich passt nicht an dieser Stelle
Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.