Назад к вопросам
Wildberries
Junior — Middle
75
В каком порядке происходит инициализация свойств и выполнение блоков кода при создании объекта, включая companion object, init блок, переменные в конструкторе и обычные переменные?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
При создании объекта в Kotlin порядок инициализации следующий:
- Инициализация companion object — происходит один раз при загрузке класса, до создания экземпляров.
- Инициализация свойств, объявленных в теле класса (включая свойства, объявленные вне конструктора) — они инициализируются в порядке объявления.
- Выполнение init блоков — выполняются в том порядке, в котором они объявлены в классе, сразу после инициализации свойств.
- Инициализация свойств, объявленных в конструкторе (например, параметры с 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 блоки в порядке объявления, а параметры конструктора инициализируются при вызове конструктора.