Блоки инициализации в Java - Часть 1

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr


Привет! В данной статье мы расскажем самое-самое основное про блоки инициализации в Java. Но у этой статьи будет продолжение - часть 2, в которой будут описаны более сложные аспекты. Приятного  прочтения!

Что такое инициализация

Для того, чтобы понять, что такое блоки инициализации, давайте сначала разберемся что такое инициализация. Кстати, этот вопрос Вам могут задать на собеседовании! Так что, даже если Вы уже знаете, что это - давайте повторим.

Инициализация (от англ. initialize, от  initial - "начальный, первоначальный") - это когда мы впервые задаем переменной какое-либо значение.

Например, у нас есть переменная:

Переменная есть, но пока в ней ничего не лежит. Мы ее не инициализировали - другими словами, не задали начальное, стартовое значение. Если попытаться сейчас вывести её на экран:

Мы получим ошибку "переменная не инициализирована":

Но если мы инициализируем переменную - например, зададим значение 25:

Тогда ошибки не будет - увидим в консоли 25:

А все потому, что переменная больше не "пустая" - теперь у нее есть значение. Она была инициализирована. Отлично - теперь давайте перейдем к самим блокам.

Привычные способы инициализации

Как видите, для корректной работы программы переменным нужно задавать начальные значения.  Мы уже привыкли это делать в середине метода - например вот так - для массивов:

или, например, в цикле:

Внутри класса, мы можем это делать так (возьмем пример из статьи "Конструкторы в Java"):

Тут у нас, как видите, есть класс Dog, у которого три параметра - имя (name), порода (poroda) и возраст (age). Мы инициализируем значения только при вызове конструктор Dog:

Иногда для инициализации мы используем сеттеры. Но есть и альтернативный способ - используя блоки инициализации.

Инициализация с помощью блоков

Представим, что мы хотим задать базовые значения переменных. Можно сделать это так:

А можно использовать блок инициализации:

Видите - две фигурные скобки, между которыми мы присвоили новые значения переменным:

Выглядит лучше, правда? 🙂

Давайте посмотрим какие существуют блоки инициализации.

Виды блоков инициализации

Существует всего два типа блоков:

  • нестатический (instance initializer)
  • статический (class initializer)

В предыдущем примере Вы видели первый тип - нестатический блок инициализации. Его общую форму можно показать так:

Второй тип - статический блок. Внешне он совсем немного отличается от первого типа - только нужно дописать слово static:

Как можно догадаться по названию:

  • статический блок используется для инициализации статических переменных, а "обычный"  - для всех остальных.

Зачем используются блоки инициализации

Красивый и читабельный код - это конечно хорошо. Но зачем они нужны? Есть ли другие преимущества у блоков инициализации?

Есть. И это - больший функционал.

Внутри блоков инициализации мы можем не только присваивать значения. Это как метод - тут можно писать любые команды. Например, вывод в консоль:

Для того, чтобы Вы могли протестировать у себя на компьютере, возьмем такой код (все тот же класс Dog):

Теперь в нашем блоке инициализации есть только System.out.println("Это нестатический блок инициализации!"). Запустим его со следующим main-ом:

И получим в консоли:

Как видите, работает. Если бы мы просто написали System.out.println, без блока инициализации, программа бы не запустилась:

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

Подводим итог:

  • блоки инициализации используются для инициализации переменных внутри класса;
  • есть два типа блоков инициализации - статический и нестатический;
  • синтаксис очень простой - просто пишем выражение внутри блока из двух скобок:

или для статического:

  • статический блок инициализации используется для статических переменных, нестатический - для всех остальных;
  • блоки инициализации делают код читабельнее, и позволяют вызывать любые методы.

Теперь Вы имеете понятие о блоках инициализации. Отлично! 🙂 Более тонкие нюансы мы рассматриваем во второй части статьи - продолжайте читать!


Понравилась наша статья? Приходите к нам учиться. Детальнее у нас на сайте.

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr
Самоучители--узнать детальнее--