Ключевое слово init
Ключевое слово init
используется для создания блоков инициализации в классе.
Блоки инициализации выполняются при создании экземпляра класса,
непосредственно после вызова первичного конструктора и до вызова вторичных конструкторов.
В классе может быть несколько блоков init
, которые выполняются в порядке их объявления.
Синтаксис
init {
// код инициализации
}
Пример
Создадим класс с блоком инициализации:
class Person(val name: String, val age: Int) {
init {
println("Person created: $name, $age years old")
}
}
val person = Person("John", 25)
Результат выполнения кода:
Person created: John, 25 years old
Пример
Класс с несколькими блоками инициализации:
class Example {
init {
println("First init block")
}
init {
println("Second init block")
}
}
val example = Example()
Результат выполнения кода:
First init block
Second init block
Пример
Блоки инициализации выполняются до тела вторичного конструктора:
class User(val name: String) {
init {
println("Init block executed")
}
constructor() : this("Guest") {
println("Secondary constructor executed")
}
}
val user = User()
Результат выполнения кода:
Init block executed
Secondary constructor executed
Пример
Проверка валидности параметров в блоке инициализации:
class Account(val balance: Double) {
init {
if (balance < 0) {
throw IllegalArgumentException("Balance cannot be negative")
}
println("Account created with balance: $balance")
}
}
val account = Account(1000.0)
Результат выполнения кода:
Account created with balance: 1000.0
Пример
Инициализация свойств в блоке инициализации:
class Rectangle(val width: Int, val height: Int) {
val area: Int
init {
area = width * height
println("Rectangle area: $area")
}
}
val rectangle = Rectangle(5, 3)
Результат выполнения кода:
Rectangle area: 15
Смотрите также
-
ключевое слово
constructor
,
которое используется для объявления конструкторов класса -
ключевое слово
class
,
которое используется для объявления классов -
ключевое слово
this
,
которое ссылается на текущий экземпляр объекта -
ключевое слово
lateinit
,
которое используется для отложенной инициализации свойств