Наше приложение использует код инициализации, который зависит от статического кода заказа, и мне интересно, будет ли этот порядок согласован во всех JVM.
Вот пример того, что я имею в виду:
public class Main {
static String staticVar = "init_value";
public static void main(String[] args) {
System.out.println(A.staticVar);
staticVar = "mainValue";
System.out.println(A.staticVar);
}
}
public class A {
static String staticVar = Main.staticVar;
}
даст:
init_value
init_value
и
public class Main {
static String staticVar = "init_value";
public static void main(String[] args) {
// System.out.println(A.staticVar);
staticVar = "mainValue";
System.out.println(A.staticVar);
}
}
public class A {
static String staticVar = Main.staticVar;
}
даст (в моем окружении):
mainValue
Подводя итог, можно сказать, что на всех JVM всегда выполняется статический код при первом использовании класса?