Sobes.tech
Junior — Middle

Որ հերթականությամբ է տեղի ունենում հատկությունների ինիցիալիզացիան և կոդի բլոկների կատարմանը օբյեկտի ստեղծման ժամանակ, ներառյալ companion object-ը, init բլոկը, կոնստրուկտորում գտնվող փոփոխականները և սովորական փոփոխականները?

sobes.tech AI

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