Sobes.tech
Назад к вопросам
Junior — Middle
75

В каком порядке происходит инициализация свойств и выполнение блоков кода при создании объекта, включая companion object, init блок, переменные в конструкторе и обычные переменные?

Компании, где спрашивали
WildberriesWildberries

Ответ от нейросети

sobes.tech AI

При создании объекта в Kotlin порядок инициализации следующий:

  1. Инициализация companion object — происходит один раз при загрузке класса, до создания экземпляров.
  2. Инициализация свойств, объявленных в теле класса (включая свойства, объявленные вне конструктора) — они инициализируются в порядке объявления.
  3. Выполнение init блоков — выполняются в том порядке, в котором они объявлены в классе, сразу после инициализации свойств.
  4. Инициализация свойств, объявленных в конструкторе (например, параметры с val/var) — они инициализируются вместе с вызовом конструктора.

Пример:

class Example(val constructorProp: String) {
    val property1 = println("property1 инициализирован")

    init {
        println("init блок 1")
    }

    val property2 = println("property2 инициализирован")

    init {
        println("init блок 2")
    }

    companion object {
        init {
            println("companion object инициализирован")
        }
    }
}

fun main() {
    val example = Example("конструктор")
}

Вывод будет примерно:

companion object инициализирован
property1 инициализирован
init блок 1
property2 инициализирован
init блок 2

Таким образом, companion object инициализируется один раз при загрузке класса, затем при создании объекта инициализируются свойства и выполняются init блоки в порядке объявления, а параметры конструктора инициализируются при вызове конструктора.