Как JVM решает, в каком порядке инициализировать классы (вызов )?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как JVM решает, в каком порядке инициализировать классы (вызов )?

Сообщение Anonymous »

Из -за того, что я знаю, когда JVM загружает и генерирует код для Clinit A, если он столкнется с неразрешенным классом B, компилятор сначала излучит метод вызов в JVM Internal для инициализации B, а затем компилируйте вызов метода/поле B обычно. Таким образом, во время выполнения B обеспечивается инициализировано до использования его поле или метода. < /p>

Пожалуйста, поправьте меня, если я совершил какую -либо ошибку в вышеизложенном. < /p>

Тогда я не понимаю, как JVM справляется с ситуацией, как ниже. < /p>

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>

Может ли кто -нибудь объяснить, как эти два класса инициализируются, поскольку они оба нуждаются в инициализировании другой части? И почему основной метод в As возвращает False, поскольку статическое поле A должно быть установлено в конструкторе A?

Подробнее здесь: https://stackoverflow.com/questions/158 ... oke-clinit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»