Что выведет код Middle Классы, data и sealed обновлено
Порядок инициализации свойств и init
Вопрос
Что выведет код? По строке на каждый вывод.
class Demo(val a: Int) {
val b = a * 2.also { println("b") }
init { println("init1 b=$b") }
val c = b + 1
init { println("init2 c=$c") }
constructor() : this(5) { println("secondary") }
}
fun main() {
Demo()
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: b, init1 b=10, init2 c=11, secondary. Инициализаторы свойств и блоки init выполняются в порядке объявления, как одна общая процедура первичного конструктора.
Что выведет
b
init1 b=10
init2 c=11
secondary
Разбор
Инициализаторы свойств и блоки init выполняются в порядке объявления, как одна общая процедура первичного конструктора. 2.also { } печатает b и возвращает 2, поэтому b = 10. Затем первый init, вычисление c, второй init. Тело вторичного конструктора выполняется последним, после делегирования в первичный.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.