Когда вызывается init в Kotlin

«Когда вызывается init в Kotlin» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

init блок вызывается сразу после первичного конструктора (primary constructor) во время инициализации экземпляра класса. Порядок выполнения:

  1. Параметры первичного конструктора
  2. Свойства, объявленные в теле класса
  3. Блоки init (в порядке их объявления)
  4. Вторичные конструкторы (если есть)
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