Junior — Middle
როდესაც ობიექტი იქმნება, თვისებების ინიციალიზაცია და კოდის ბლოკების შესრულება რა წესით ხდება, მათ შორის companion object, init ბლოკი, კონსტრუქტორში მყოფი ცვლადები და ჩვეულებრივი ცვლადები?
sobes.tech AI
პასუხი AI-სგან
როდესაც ქმნით ობიექტს Kotlin-ში, ინიცირების წესრიგი შემდეგია:
- companion object-ის ინიცირება — ხდება ერთხელ კლასის ჩატვირთვისას, ობიექტების შექმნამდე.
- კლასის სხეულში გამოყოფილი თვისებების ინიცირება (მათ შორის, რომლებიც გამოყოფილია კონსტრუქტორის გარეთ) — ინიცირებულია გამოყოფის წესით.
- init ბლოკების შესრულება — ისინი შესრულდება კლასში გამოყოფის წესით, თვისებების ინიცირებიდან անմիջապես შემდეგ.
- კონსტრუქტორში გამოყოფილი თვისებების (მაგ., val/var პარამეტრები) ინიცირება — ინიცირებულია კონსტრუქტორის გამოძახებისას.
მაგალითი:
class Example(val constructorProp: String) {
val property1 = println("property1 ინიცირებულია")
init {
println("init ბლოკი 1")
}
val property2 = println("property2 ინიცირებულია")
init {
println("init ბლოკი 2")
}
companion object {
init {
println("companion object ინიცირებულია")
}
}
}
fun main() {
val example = Example("კონსტრუქტორი")
}
გამომავალი დაახლოებით ასე იქნება:
companion object ინიცირებულია
property1 ინიცირებულია
init ბლოკი 1
property2 ინიცირებულია
init ბლოკი 2
ამ გზით, companion object ინიცირებულია ერთხელ კლასის ჩატვირთვისას, შემდეგ, ობიექტის შექმნისას, ინიცირებულია თვისებები და შესრულებულია init ბლოკები გამოყოფის წესით, ხოლო კონსტრუქტორის პარამეტრები ინიცირებულია კონსტრუქტორის გამოძახებისას.