Java statische Variablen, die voneinander abhängen

9

Es gibt zwei Klassen mit jeweils einem eigenen statischen Feld. Was passiert, wenn ein Feld von einem anderen abhängt? Zum Beispiel:

%Vor%

Test Ich habe vorgeschlagen, dass in diesem Fall needed vor something initialisiert wird. Im Test habe ich Java nach der Variablen A gefragt und B wurde vorher nicht geladen. Das Ergebnis kann jedoch nur Zufall sein. Gibt es einen Mechanismus in Java, der mir garantiert, dass needed immer initialisiert wird, um als Argument verwendet zu werden?

Ich habe einen weiteren Test gemacht. Die Ergebnisse zeigen auch, dass finale primitive Typen im Extremfall einen Standardwert haben (so dass sie tatsächlich unterschiedliche Werte an verschiedenen Stellen des Codes haben, obwohl sie final sind):

%Vor%

Wenn Sie test so ausführen, dass zuerst die Klasse A geladen wird, lautet der Wert:

%Vor%

Wenn Sie dann zuerst test mit B loading ausführen, lautet der Wert:

%Vor%

Es scheint, dass Java einfach den Standard int value 0 verwendet. Ich war überrascht, dass dieser Code kompiliert.

Die Ergebnisse des zweiten Tests deuten auch darauf hin, dass Java versucht, das statische Feld zu initialisieren, das es bei der Initialisierung der Variablen aus anderen Klassen zu verwenden plant. Ist das richtig? Ist es dokumentiert, vorhersagbares Verhalten?

    
korda 08.12.2013, 08:11
quelle

1 Antwort

4

Solange Sie baumartige Abhängigkeiten Ihrer Klassen haben, können Sie sich darauf verlassen, dass Klasse X initialisiert wurde, wenn Klasse Y sie benötigt. Sobald Sie Schleifen einführen (Klasse X braucht Y und Y braucht X oder sogar A braucht B, das C braucht, das D braucht, das A benötigt), ist das Verhalten undefiniert und kann sich ändern, wenn Sie Ihre Java-Version, JVM-Hersteller, Hardware ändern Plattform oder was auch immer. Tun Sie das nicht - zirkuläre Abhängigkeiten sind fast immer das Ergebnis schlechter Planung.

    
Guntram Blohm 08.12.2013, 08:17
quelle

Tags und Links