„Hallo Amigo! Ich habe gehört, dass Ritschie dir etwas Neues und Aufregendes erklärt hat?!“
„So ist es, Kim.“
„Mein Thema wird nicht weniger interessant sein. Ich möchte dir erzählen, wie Klassen in den Speicher geladen werden.“
Klassen in Java sind Dateien auf der Festplatte, die Bytecode enthalten, der wiederum kompilierter Java-Code ist.
„Ja, ich erinnere mich.“
Die Java-Maschine lädt sie nicht, wenn sie sie nicht braucht. Sobald irgendwo im Code eine Klasse aufgerufen wird, prüft die Java-Maschine, ob sie geladen ist. Und wenn nicht, dann lädt und initialisiert sie sie.
Die Initialisierung einer Klasse beinhaltet die Zuweisung von Werten zu allen statischen Variablen und den Aufruf aller statischen Initialisierungsblöcke.
„Das scheint ähnlich zu sein wie das Aufrufen eines Konstruktors mit einem Objekt. Aber was ist ein statischer Initialisierungsblock?“
„Wenn du komplexen Code ausführen musst (z.B. etwas aus einer Datei laden), um Objekte zu initialisieren, können wir dies in einem Konstruktor tun. Statische Variablen bieten diese Möglichkeit jedoch nicht. Da der Bedarf aber weiterhin besteht, kannst du einen oder mehrere statische Initialisierungsblöcke zu Klassen hinzufügen. Sie entsprechen im Grunde statischen Konstruktoren.“
Das sieht dann so aus:“
Code | Das passiert tatsächlich |
---|---|
|
|
Das entspricht etwa dem, was passiert, wenn ein Konstruktor aufgerufen wird. Ich habe es sogar als (nicht existierenden) statischen Konstruktor geschrieben.
„Ja, ich verstehe.“
„Sehr gut.
GO TO FULL VERSION