class A {
private static int v = func();
private static int func() {
System.out.print("A");
return 0;
}
}
class B {
private static int v = func();
public static int func() {
System.out.print("B");
return 0;
}
}
class C {
private static int v = func();
public static int func() {
System.out.print("C");
return 0;
}
}
class Question {
public static void main(String[] args) {
B b;
C.func();
b = new B();
System.out.println();
}
}
Вывод будет: CCB
Почему так? Из спецификации:
Класс Т инициализируется в одном из следующий 5 случаев:
1. Создается объект класса Т.
2. Вызывется статичный метод класса Т.
3. Статичной переменной класса Т присваивается значение (вне класса).
4. Статичная (не константная) переменная класса Т используется.
5. Т - внешний класс и внутри него выполняется конструкция assert.
Таким образом первое упоминание класса В не запускает инициализацию класса.
пример взят из http://www.quizful.net/
Комментариев нет:
Отправить комментарий