Sobes.tech
Junior — Middle

¿En qué orden se inicializan las propiedades y se ejecutan los bloques de código al crear un objeto, incluyendo el companion object, el bloque init, las variables en el constructor y las variables normales?

sobes.tech AI

Respuesta de la IA

Al crear un objeto en Kotlin, el orden de inicialización es el siguiente:

  1. Inicialización del companion object — ocurre una vez al cargar la clase, antes de crear instancias.
  2. Inicialización de las propiedades declaradas en el cuerpo de la clase (incluyendo propiedades declaradas fuera del constructor) — se inicializan en el orden en que se declaran.
  3. Ejecución de los bloques init — se ejecutan en el orden en que se declaran en la clase, inmediatamente después de la inicialización de las propiedades.
  4. Inicialización de las propiedades declaradas en el declaración del constructor (por ejemplo, parámetros con val/var) — se inicializan junto con la llamada al constructor.

Ejemplo:

class Example(val constructorProp: String) {
    val property1 = println("property1 inicializado")

    init {
        println("bloque init 1")
    }

    val property2 = println("property2 inicializado")

    init {
        println("bloque init 2")
    }

    companion object {
        init {
            println("companion object inicializado")
        }
    }
}

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

La salida será aproximadamente:

companion object inicializado
property1 inicializado
bloque init 1
property2 inicializado
bloque init 2

De esta manera, el companion object se inicializa una vez al cargar la clase, luego, al crear un objeto, se inicializan las propiedades y se ejecutan los bloques init en el orden de declaración, y los parámetros del constructor se inicializan al llamar al constructor.