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 με τη σειρά δήλωσης, και οι παράμετροι του κατασκευαστή αρχικοποιούνται κατά την κλήση του κατασκευαστή.