русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Инициализаторы


Дата добавления: 2015-06-12; просмотров: 677; Нарушение авторских прав


Наконец, последней допустимой конструкцией в теле класса является объявление инициализаторов. Записываются объектные инициализаторы очень просто — внутри фигурных скобок.

public class Test { private int x, y, z;

// инициализатор объекта

{ x=3; if (x>0) y=4; z=Math.max(x, y); } }

Инициализаторы не имеют имен, исполняются при создании объек­тов, не могут быть вызваны явно, не передаются по наследству (хотя, ко­нечно, инициализаторы в родительском классе продолжают исполняться при создании объекта класса-наследника).

Было указано уже три вида инициализирующего кода в классах - кон­структоры, инициализаторы переменных, а теперь добавились объектные инициализаторы. Необходимо разобраться, в какой последовательности что выполняется, в том числе при наследовании. При создании экземпля­ра класса вызванный конструктор выполняется следующим образом:

• если первой строкой идет обращение к конструктору родительско­го класса (явное или добавленное компилятором по умолчанию), то этот конструктор исполняется;

• в случае успешного исполнения вызываются все инициализаторы полей и объекта в том порядке, в каком они объявлены в теле класса;

• если первой строкой идет обращение к другому конструктору этого же класса, то он вызывается. Повторное выполнение ини­циализаторов не производится.

Второй пункт имеет ряд важных следствий. Во-первых, из него сле­дует, что в инициализаторах нельзя использовать переменные класса, если их объявление записано позже.

Во-вторых, теперь можно сформулировать наиболее гибкий подход к инициализации final-полей. Главное требование — чтобы такие поля были проинициализированы, ровно один раз. Это можно обеспечить в следую­щих случаях:

• если инициализировать поле при объявлении;

• если инициализировать поле только один раз в инициализаторе объекта (он должен быть записан после объявления поля);



• если инициализировать поле только один раз в каждом конструк­торе, в первой строке которого стоит явное или неявное обраще­ние к конструктору родителя. Конструктор, в первой строке которого стоит this, не может и не должен инициализировать final-поле, так как цепочка this-вызовов приведет к конструктору с super, в котором эта инициализация обязательно присутствует.Для иллюстрации порядка исполнения инициализирующих конст­рукций рассмотрим следующий пример:

public class Test {{

System.out.println("initlallzer");}

intx, y=getY();

final int z;{System.out.println("initializer2");}

private int getY() {System.out.println("getY() "+z);

return z;}

public TestO {System.out.println("Test()");

z=3;}

public Test(int x) {thisO;System.out.println("Test(int)");

// z=4; - нельзя! final-поле уже было инициализировано} }

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



<== предыдущая лекция | следующая лекция ==>
SmallColorSquare | Метод main


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.775 сек.