Sobes.tech
Junior — Middle

Em que ordem ocorre a inicialização das propriedades e a execução dos blocos de código na criação de um objeto, incluindo o companion object, bloco init, variáveis no construtor e variáveis comuns?

sobes.tech IA

Resposta da IA

Ao criar um objeto em Kotlin, a ordem de inicialização é a seguinte:

  1. Inicialização do companion object — ocorre uma vez ao carregar a classe, antes de criar instâncias.
  2. Inicialização das propriedades declaradas no corpo da classe (incluindo propriedades declaradas fora do construtor) — elas são inicializadas na ordem em que são declaradas.
  3. Execução dos blocos init — eles são executados na ordem em que são declarados na classe, imediatamente após a inicialização das propriedades.
  4. Inicialização das propriedades declaradas na assinatura do construtor (por exemplo, parâmetros com val/var) — elas são inicializadas junto com a chamada do construtor.

Exemplo:

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

    init {
        println("bloco init 1")
    }

    val property2 = println("property2 inicializado")

    init {
        println("bloco init 2")
    }

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

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

A saída será aproximadamente:

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

Assim, o companion object é inicializado uma vez ao carregar a classe, depois, ao criar um objeto, as propriedades são inicializadas e os blocos init são executados na ordem de declaração, e os parâmetros do construtor são inicializados ao chamar o construtor.