В нашей команде мы обнаружили какое-то странное поведение, в котором мы использовали квалификаторы static
и final
. Это наш тестовый класс:
public class Test {
public static final Test me = new Test();
public static final Integer I = 4;
public static final String S = "abc";
public Test() {
System.out.println(I);
System.out.println(S);
}
public static Test getInstance() { return me; }
public static void main(String[] args) {
Test.getInstance();
}
}
Когда мы запускаем метод main
, получаем результат:
null
abc
Я бы понял, написал ли он значения null
оба раза, так как код статических членов класса выполняется сверху вниз.
Может ли кто-нибудь объяснить, почему это поведение происходит?