четверг, 20 сентября 2007 г.

Java Puzzle 49: Larger Than Life

Что напечатает следующая программа?
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.

Комментариев нет:

Отправить комментарий