Middle
Kotlin'da konstruktorlar va obyektlarni boshlash bilan ishlash xususiyatlari qanday?
sobes.tech AI
AIdan javob
Kotlinda, sinflar birinchi konstruktor va bir yoki bir nechta ikkinchi konstruktorlarga ega bo'lishi mumkin.
Birinchi konstruktor:
- Sinfning sarlavhasida e'lon qilinadi:
class User(val name: String, var age: Int = 0) { // sinfning tanasi } - Tana emas. Initsializatsiya kodi
initbloklarida bajariladi. valyokivarbilan e'lon qilingan xususiyatlar sinf xususiyatlariga aylanadi.- Konstruktor parametrlaridan
initbloklarida va xususiyatlarni initsializatsiya qilishda foydalanish mumkin:init { println("Foydalanuvchi boshlanishi $name") } val description = "Foydalanuvchi: $name, yosh: $age" - Agar birinchi konstruktor hech qanday annotatsiya yoki ko'rinish modifikatoriga ega bo'lmasa,
constructorso'zi o'tkazib yuborilishi mumkin.
init bloklari:
- Sinf nusxasini yaratishda bajariladigan boshlang'ich kodlarni o'z ichiga oladi.
- Ular sinfda e'lon qilingan tartibda bajariladi.
- Birinchi konstruktor chaqirilgandan so'ng (agar mavjud bo'lsa), ammo ikkilamchi konstruktorlardan oldin bajariladi.
Ikkinchi konstruktorlar:
constructorso'zi bilan e'lon qilinadi.this()yordamida o'z sinfidagi boshqa konstruktor chaqiruviga yokisuper()yordamida asosiy sinf konstruktoriga delegatsiya qilish mumkin. Delegatsiya chaqiruvi birinchi bo'lishi kerak.class User(val name: String) { constructor(name: String, age: Int) : this(name) { println("Ikkinchi konstruktor") // qo'shimcha boshlang'ich logika } }- Agar sinfda birinchi konstruktor bo'lsa, barcha ikkinchi konstruktorlar uni aniq yoki noaniq tarzda
this()yordamida delegatsiya qilishi kerak.
Boshlanish tartibi:
- Birinchi konstruktor kodining bajarilishi (agar mavjud bo'lsa).
initbloklarining bajarilishi.- Ikkinchi konstruktor kodining bajarilishi (agar ishlatilsa).
Misol:
class Example(name: String) {
init {
println("$name uchun birinchi init bloki")
}
val property1 = "Xususiyat 1"
init {
println("$name uchun ikkinchi init bloki")
}
constructor(name: String, age: Int) : this(name) {
println("$name uchun ikkinchi konstruktor, yosh: $age")
}
}
fun main() {
val ex1 = Example("Foydalanuvchi1") // Chiqish: $name uchun birinchi init bloki, $name uchun ikkinchi init bloki
val ex2 = Example("Foydalanuvchi2", 30) // Chiqish: $name uchun birinchi init bloki, $name uchun ikkinchi init bloki, ikkinchi konstruktor, yosh 30
}
Asosiy xususiyatlar: birinchi konstruktor uchun deklarativ sintaksis, init bloklaridan foydalanish, ikkinchi konstruktorlarda aniq delegatsiya, obyektlarni yaratishda izchillikni ta'minlaydi.