Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren?

klhlubek

Mitglied
Meine Frage lautet:

Man kann eine nur finale Variable beliebig wann initialisieren, während man eine finale statische Variable entweder sofort oder im Konstruktor bzw. im statischen Initialisierungsblock initialisieren muss, wo ich mich nun frage, warum ist das so, dass finale statische Variablen nicht später initialisiert werden können?

Danke für die Antwort.
 
Auch eine finale Vriable ohne Statik muss entweder sofort oder durch den Aufruf des Konstruktors initialisiert werden.
der Modifier final sagt nämlich, dass es sich um keine Variable sondern um eine Konstante handelt, welche halt konstant ist(nicht veränderbar).

EDIT: Bei statischen Konstanten ist halt das Problem, dass sie Objekt unabhängig sind. Man kann sie also auch schon aufrufen bevor man den Konstruktor aufruft.
 
Eine static final Variable kann man nie im Konstruktor initialisiert!
Der Grund liegt im ClassLoading.
Einfach gesagt:
Bei der ersten Verwendung der Klasse lädt der ClassLoader (welcher auch immer) die Klasse. Dabei werden alle static initialisiert. 'static's sind ja für alle Instanzen (mittels new Konstruktor) gleich. Bei der Initialisierung mittels ClassLoader werden auch diese statics von dessen gehalten (einfach gesagt). Nun eine static Variable welche final ist, kann nicht mehr geändert werden. Sprich, es gibt keine Möglichkeit diese nach dem laden der Klasse zu ändern. Darum wird sie entweder gleich direkt initialisiert zB static final String ASD = "asd", oder halt mittels static {} block. Dieser wird auch beim ersten Laden der Klasse via ClassLoader ausgeführt.
 

Neue Themen


Zurück
Oben