Ответ
init блок вызывается сразу после первичного конструктора (primary constructor) во время инициализации экземпляра класса. Порядок выполнения:
- Параметры первичного конструктора
- Свойства, объявленные в теле класса
- Блоки
init(в порядке их объявления) - Вторичные конструкторы (если есть)
class Person(name: String) {
val firstProperty = "First: $name".also(::println)
init {
println("First init: $name")
}
val secondProperty = "Second: $name".also(println)
init {
println("Second init: $name")
}
}
// Вызов: Person("Alex") выведет:
// First: Alex
// First init: Alex
// Second: Alex
// Second init: Alex