Ответ
Порядок инициализации:
- Companion object (если есть) - выполняется при первом обращении к классу
- Параметры конструктора (если передаются)
- Свойства класса (переменные) в порядке объявления
- init блоки в порядке их объявления
- Вторичные конструкторы (если есть)
Пример:
class Test(val param: String) {
companion object {
init { println("1. Companion") }
}
val prop1 = "2. Property".also(::println)
init { println("3. Init block") }
val prop2 = "4. Property 2".also(::println)
}