Главная » Java » Блоки инициализации Java

0

Еще один способ осуществления сложных операций по инициализации полей объекта связан с использованием блоков инициализации, которые представляют собой наборы выражений инициализации полей, заключенные в фигурные скобки и размещаемые внутри класса вне объявлений методов или конструкторов. Блок инициализации выполняется так же, как если бы он был расположен в верхней части тела любого конструктора. Если блоков инициализации несколько, они выполняются в порядке следования в тексте класса. Блок инициализации способен генерировать исключения, если их объявления перечислены в предложениях throws всех конструкторов класса.

В приведенной ниже версии класса Body конструктор без параметров заменен равноценным блоком инициализации.

 

class Body {

         public long idNum;

         public String name = "<Без имени>";

         public Body orbits = null;

         private static long nextID = 0;

        

         {

                        idNum = nextID++;           

         }

         Body(String bodyName, Body orbitsAround) {

                        name = bodyName;

                        orbits = orbitsAround;                      

         }

}

Теперь конструктор с двумя параметрами не должен выполнять явный вызов конструктора без параметров, как раньше, поскольку такового больше нет – в распоряжении пользователей класса остался единственный конструктор.

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

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии