Junior — Middle
В какъв ред се случва инициализацията на свойствата и изпълнението на блоковете код при създаването на обект, включително companion object, init блок, променливите в конструктора и обикновените променливи?
sobes.tech AI
Отговор от 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 блоковете в реда на обявяване, а параметрите на конструктора се инициализират при извикване на конструктора.