Страницы

Поиск по вопросам

четверг, 4 апреля 2019 г.

Чем опасна слепая инициализация?

Прошу объяснить, чем опасна "слепая инициализация" на каком-нибудь примере из практики?
public class ShopActivity { private int revenue = Prefs.getRevenue(); }
Всегда ли нужно выносить код инициализации переменных в конструкторе? Когда можно сделать исключение?


Ответ

Компилятор переносит инициализацию полей в месте объявления (как и инициализацию полей в нестатических блоках) в конструктор (точнее говоря, во все имеющиеся).
Инициализация полей при объявлении и инициализация полей в конструкторе – это практически одно и то же. Разница лишь в том, что:
Инициализация полей в месте объявления происходит перед инициализацией полей в конструкторе. В случае инициализации полей в месте объявления невозможно перехватить исключение (при этом, если исключение checked, то нужно будет создать конструктор, который далее будет прокидывать возникшее исключение).

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

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