Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните как работает этот код.

No Name Профи (752), на голосовании 1 месяц назад
 public class MyClass { 
public static void main(String[] args) {
Class1 c = new Class1();
System.out.println(c.s);
}
}
class Class1 {
public String s = "Явная инициализация";
public Class1() {
System.out.println(s);
s = "Конструктор";
}
// Инициализационный блок
{
System.out.println(s);
s = "Блок";
}
}
Результат будет выглядеть следующим образом:

Явная инициализация
Блок
Конструктор
Дополнен 2 месяца назад
Почему конструктор не срабатывает первым?
Голосование за лучший ответ
Улик Додиков Оракул (98621) 2 месяца назад
Сначала поле `s` инициализируется строкой "Явная инициализация". Потом идет инициализационный блок, который выводит текущее значение `s` и меняет его на "Блок". После этого вызывается конструктор, который снова печатает значение `s`, уже "Блок", и меняет его на "Конструктор". В `main` выводится последнее значение `s`, т.е. "Конструктор".
No NameПрофи (752) 2 месяца назад
Примерно это я и прочитал в учебнике.

Но println вызывается только один раз и для переменнной 's' по ссылке 'c'.

Почему он вывел вторым Блок ,а не Конструктор? Зачем он его пропустил,а потом вернулся?
Улик Додиков Оракул (98621) No Name, https://pastebin.com/CXk5Dg0a
Похожие вопросы