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 բլոկները հայտարարության հերթականությամբ, իսկ կոնստրուկտորի պարամետրերը ինիցիալիզացվում են կոնստրուկտորին կանչելիս։