Finale, statische Member: werden sie geladen, auch wenn sie nicht verwendet werden?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine Frage bezüglich finale, statische Klassenmember, also quasi die Java-Konstanten. Werden diese am Anfang, wenn die Klassen geladen werden, ebenfalls geladen? Das ist für statische Member ja der Fall, aber was, wenn sie im Programmcode gar nicht verwendet werden?

Der letztere Fall ist interessant - nehmen wir an, ich habe eine große Anzahl an Klassen mit finalen, statischen Membern, die ich aber nirgenswo verwende. Verbrauchen die dann trotzdem Speicher wenn mein Programm läuft, oder optimiert der Compiler/die JVM das weg?


Ich würde mich freuen wenn das jemand von Euch weiß, oder vielleicht ne Ahnung hat, wo das in den Java Specs stehen könnte :)


Danke für Eure Hilfe!
 
Wenn Du mal mit dem Debugger über den Konstruktor stepst, wirst Du festtelllen, dass die statics vor dem Konstruktor initialisiert werden.

Grüße
gore

* final heisst nur unveränderlich.
 
Hallo,

danke für Deine Antwort. Und was ist, wenn die Klasse nicht instanziiert wird und der Konstruktor nicht aufgerufen wird? Auf finale, statische Member kann man ja trotzdem zugreifen (z.B. java.awt.Font.BOLD), d.h. sie wurden initialisiert.

Meine Frage ist nun, wie schon oben geschrieben, was ist wenn diese Klasse/der Member nirgendswo im Programmcode verwendet wird, wird der Speicherplatz dann trotzdem belegt? Oder "merkt" der Compiler/die JVM, dass die Konstante nirgendswo benötigt wird und lässt die initialisierung dann einfach bleiben?
 
Da der Classloader erst Klassen lädt, wenn man Sie anfordert, würde ich mal mit ziemlicher Wahrscheinlichkeit auf "Nein" tippen.

Grüße
 
Zurück