Junior — Middle
111
Дар вақти эҷоди объект, чӣ тартиб аст, ки хусусиятҳо оғоз ёбанд ва блокҳои коди иҷро шаванд, аз ҷумла companion object, init блок, тағйирёбандаҳо дар конструктор ва тағйирёбандаҳои оддӣ?
Ширкатҳо дар куҷо пурсиданд
Ҷавоб аз AI
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 блоки в порядке объявления, а параметры конструктора инициализируются при вызове конструктора.