Блок init выполняется сразу после основного конструктора. Блоки инициализатора эффективно становятся частью основного конструктора. Конструктор является вторичным конструктором. Делегирование первичному конструктору происходит как первый оператор вторичного конструктора, поэтому код во всех блоках инициализатора выполняется перед телом вторичного конструктора.
Пример
class Sample(private var s : String) {
constructor(t: String, u: String) : this(t) {
this.s += "$u"
}
init {
s += "B"
}
}
Думаю, вы инициализировали класс Sample с
Sample("T","U")
Вы получите строковый ответ в переменной s как "TBU"
.
Значение "T"
присваивается s из основного конструктора класса Sample , а затем сразу же начинает выполняться блок init, добавляя "B"
к переменной. После того, как блок init начинает выполнять блок вторичного конструктора и s станет "TBU"
.