Sobes.tech
Junior — Middle

In welke volgorde worden de eigenschappen geïnitialiseerd en worden de codeblokken uitgevoerd bij het maken van een object, inclusief companion object, init-blok, variabelen in de constructor en gewone variabelen?

sobes.tech AI

Antwoord van AI

Bij het maken van een object in Kotlin is de initialisatievolgorde als volgt:

  1. Initialisatie van het companion object — gebeurt één keer bij het laden van de klasse, vóór het maken van instanties.
  2. Initialisatie van de eigenschappen gedeclareerd in de klasse (inclusief buiten de constructor gedeclareerde eigenschappen) — worden geïnitialiseerd in de volgorde waarin ze zijn gedeclareerd.
  3. Uitvoering van init-blokken — worden uitgevoerd in de volgorde waarin ze in de klasse zijn gedeclareerd, direct na de initialisatie van de eigenschappen.
  4. Initialisatie van de eigenschappen gedeclareerd in de constructor (bijvoorbeeld parameters met val/var) — worden geïnitialiseerd bij het aanroepen van de constructor.

Voorbeeld:

class Example(val constructorProp: String) {
    val property1 = println("property1 geïnitialiseerd")

    init {
        println("init-blok 1")
    }

    val property2 = println("property2 geïnitialiseerd")

    init {
        println("init-blok 2")
    }

    companion object {
        init {
            println("companion object geïnitialiseerd")
        }
    }
}

fun main() {
    val example = Example("constructor")
}

De uitvoer zal ongeveer zijn:

companion object geïnitialiseerd
property1 geïnitialiseerd
init-blok 1
property2 geïnitialiseerd
init-blok 2

Op deze manier wordt het companion object één keer geïnitialiseerd bij het laden van de klasse, vervolgens worden bij het maken van een object de eigenschappen geïnitialiseerd en de init-blokken uitgevoerd in de volgorde van declaratie, en de constructorparameters worden geïnitialiseerd bij het aanroepen van de constructor.