Программирование на Java



         

Инициализаторы - часть 2


Для иллюстрации порядка исполнения инициализирующих конструкций рассмотрим следующий пример:

public class Test { { System.out.println("initializer"); } int x, y=getY(); final int z; { System.out.println("initializer2"); } private int getY() { System.out.println("getY() "+z); return z; } public Test() { System.out.println("Test()"); z=3; } public Test(int x) { this(); System.out.println("Test(int)"); // z=4; - нельзя! final-поле уже // было инициализировано } }

После выполнения выражения new Test() на консоли появится:

initializer getY() 0 initializer2 Test()

Обратите внимание, что для инициализации поля y вызывается метод getY(), который возвращает значение final-поля z, которое еще не было инициализировано. Поэтому в итоге поле y получит значение по умолчанию 0, а затем поле z получит постоянное значение 3, которое никогда уже не изменится.

После выполнения выражения new Test(3) на консоли появится:

initializer getY() 0 initializer2 Test() Test(int)




Содержание  Назад  Вперед