Дошел до 28 уровня. И неожиданно осознал, что я не понимаю есть ли разница инициализации переменной при ее объявлении или в конструкторе который у нас присутствует явно. Для примера возьмем final которую обязаны инициализировать. Пожалуйста, на "пальцах" разъясните разницу между примерами:
a)
public class Test {
private String name;
private final Object obj = new Object();
public AdvertisementManager(String name) {
this.name = name;
}
}
b)
public class Test {
private String name;
private final Object obj;
public AdvertisementManager(String name) {
this.name = name;
obj = new Object();
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Вот ссылка на статью.
Только в Вашем случае а), это скорее константа уровня обьекта класса(еще есть константы уровня класса static final). Т.е. все обьекты с одной и той же константой.
Что касается b), то инициализируя в конструкторе мы присваиваем константе final каждого обьекта новое значение.
Вывод
b)
Вывод
Когда final переменная инициализированна, изменить ее значение не удасться. Это к слову об b). Попробуйте сколько бы вы обьектов не создали, значение переменной останеться неизменной для каждого обьекта. Что касается a), то конструктор дает нам возможность инициализировать каждый раз при создании обьекта final переменную новым значением.