Ответ
Companion object инициализируется при первом обращении к классу, в котором он объявлен, либо при первом обращении к самому companion object. Это происходит лениво (lazy initialization), аналогично статическим блокам в Java.
Пример:
class MyClass {
companion object {
init {
println("Companion initialized")
}
const val CONST_VALUE = 42
}
}
// Инициализация произойдет здесь:
val value = MyClass.CONST_VALUE
Важные особенности:
- Инициализируется только один раз (синглтон)
- Потокобезопасен (инициализация синхронизирована)
- Доступен без создания экземпляра класса