Wie entscheidet die JVM, in welcher Reihenfolge Klassen initialisiert werden ( aufrufen)?Java

Java-Forum
Guest
 Wie entscheidet die JVM, in welcher Reihenfolge Klassen initialisiert werden ( aufrufen)?

Post by Guest »

Soweit ich weiß, gibt der Compiler beim Laden und Generieren von Code für die Clinit von A, wenn er auf eine unaufgelöste Klasse B stößt, zunächst einen Methodenaufruf an JVM intern aus, um B zu initialisieren, und kompiliert dann den Methodenaufruf/die Feldverwendung von B normalerweise. Daher wird zur Laufzeit sichergestellt, dass B initialisiert wird, bevor sein Feld oder seine Methode verwendet wird.

Bitte korrigieren Sie mich, wenn ich oben einen Fehler gemacht habe.

Dann verstehe ich nicht, wie JVM mit einer Situation wie der folgenden umgeht.

public class A {
public static A a = new A(B.b);
public A(B b) {
a = null;
}

public static void main(String[] args) {
System.out.println(a == null);
}
}

public class B {
public static B b = new B(A.a);
public B(A a) {}
}
< /code>

Kann jemand erklären, wie diese beiden Klassen initialisiert werden, da beide den anderen Teil zuerst initialisiert werden müssen? Und warum die Hauptmethode in einem falschen zurückgibt, da das statische Feld A im Konstruktor von A null gesetzt werden sollte?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post