Что напечатает следующая программа?
public class Person {
private final int age;
private static final Person PERSON = new Person();
private static final int YEAR
= Calendar.getInstance().get(Calendar.YEAR);
public Person() {
this.age = YEAR - 2000;
}
public static void main(String[] args) {
System.out.println("age = " + PERSON.age);
}
}
А программа напечатает не 7, а -2000!
Программа показывает, что можно наблюдать final static поле до того, как оно будет проинициализировано. И чтобы это исправить надо изменить порядок следования полей: поставить YEAR перед PERSON, так как создание экземпляра Person требует проинициализированной переменной YEAR.
Комментариев нет:
Отправить комментарий