Прошу объяснить, чем опасна "слепая инициализация" на каком-нибудь примере из практики?
public class ShopActivity {
private int revenue = Prefs.getRevenue();
}
Всегда ли нужно выносить код инициализации переменных в конструкторе? Когда можно сделать исключение?
Компилятор переносит инициализацию полей в месте объявления (как и инициализацию полей в нестатических блоках) в конструктор (точнее говоря, во все имеющиеся).
Инициализация полей при объявлении и инициализация полей в конструкторе – это практически одно и то же. Разница лишь в том, что:
Инициализация полей в месте объявления происходит перед инициализацией полей в конструкторе.
В случае инициализации полей в месте объявления невозможно перехватить исключение (при этом, если исключение checked, то нужно будет создать конструктор, который далее будет прокидывать возникшее исключение).
Если совсем теоретически, то инициализируя свойства класса в момент их объявления необходимо быть твердо уверенным в том, что используемые для инициализации объекты существуют, а методы отработают корректно, так как вставить проверки и try/catch
не получится.
public class Test{
private Int number = 10;
//тут вообще никаких проблем
private String string = SomeStaticClass.getString();
//А если getString() бросит исключение?
private Int number2 = Integer.parseInt(string);
//А если string "кривая"?
private View view = findViewById(R.id.view);
//findViewById работает с инициализированным контекстом, которого на данном моменте просто не существует
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Задача - отправить на сервер запрос (либо параметры для запроса на сервере) и получить выборкуОднако с отправкой возникли проблемы
При компиляции проекта перед деплоем на weblogic ide jDeveloper выдает ошибку: