init-block och initieringsordning
Använd init-block och förstå ordningen för initiering av egenskaper och block.
init-block och initieringsordning är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad är ett init-block?
Ett init { }-block innehåller kod som körs när en instans konstrueras. Det är en del av den primära konstruktorns logik.
Enkelt init-block
Init-blocket körs under konstruktionen, efter egenskapsinitierare i källkodens ordning.
class Logger(val name: String) {
init {
println("Constructed Logger("$name")")
}
}
fun main() {
val l = Logger("auth")
}Validering i init
Använd require eller check i init för att upprätthålla invariants vid konstruktionstillfället.
class Percentage(val value: Int) {
init {
require(value in 0..100) { "value must be 0..100, was $value" }
}
}
fun main() {
println(Percentage(75).value)
// Percentage(150) // throws IllegalArgumentException
}Flera init-block
Du kan ha flera init-block. De körs i källkodens ordning, varvade med egenskapsinitierare.
class Demo(val x: Int) {
init { println("First init, x=$x") }
val doubled = x * 2
init { println("Second init, doubled=$doubled") }
}
fun main() {
Demo(5)
}Ordning för egenskapsinitierare och init
Egenskapsinitierare och init-block körs uppifrån och ned i källkodens ordning. En egenskap måste tilldelas innan den används.
class Order {
val createdAt = System.currentTimeMillis()
init { println("created at $createdAt") }
val nextId = 1
init { println("next id = $nextId") }
}
fun main() {
Order()
}Egenskaper kan inte användas innan de initieras
Att referera till en egenskap innan dess initierare körs är ett kompileringsfel.
class Bad {
init {
// println(name) // ERROR: name not yet initialized
}
val name = "after init"
}
fun main() { Bad() }Beräkna härledda egenskaper
Använd init-block för att beräkna härlett tillstånd som beror på flera konstruktorparametrar.
class Rectangle(val width: Int, val height: Int) {
val area: Int
init {
area = width * height
}
}
fun main() {
val r = Rectangle(4, 5)
println("area = ${r.area}") // 20
}Bieffekter: loggning
Använd init för icke-trivial konfigurering, till exempel loggning, allokering eller registrering.
class Service(val name: String) {
init {
println("[BOOT] starting service '$name'")
}
}
fun main() {
Service("auth")
Service("payments")
}Initieringsordning med underklasser
Superklassens init körs före underklassens init. Varje klass initierar sina egna egenskaper i källkodens ordning.
open class Base {
init { println("Base init") }
}
class Sub : Base() {
init { println("Sub init") }
}
fun main() { Sub() }Undvik tung logik i init
Långvariga init-block gör varje konstruktion långsammare. Överväg lat initiering eller factory-metoder om konfigureringen är kostsam.
class Heavy(val n: Int) {
val data: List<Int> by lazy { (1..n).toList() }
}
fun main() {
val h = Heavy(1_000_000)
println("Created without computing data")
println("First element: ${h.data[0]}") // now data initializes
}Kombinera init med sekundära konstruktorer
Sekundära konstruktorer delegerar till den primära konstruktorn, och init-block körs som en del av den primära vägen.
class Box(val content: String) {
init { println("init for '$content'") }
constructor(): this("empty") { println("secondary done") }
}
fun main() {
Box()
}Snabbkontroll
I vilken ordning körs flera init-block och egenskapsinitierare i en Kotlin-klass?
Sammanfattning
init-block innehåller logik som körs under konstruktionen – validering, härledda egenskaper och bieffekter. Flera block körs i källkodens ordning, varvade med egenskapsinitierare. Undvik tungt arbete i init; använd lazy eller factory-metoder i stället.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”init-block och initieringsordning” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”init-block och initieringsordning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”init-block och initieringsordning”?
Använd init-block och förstå ordningen för initiering av egenskaper och block. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”init-block och initieringsordning”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?
Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Primärkonstruktor och egenskapsparametrar
- init-block och initieringsordning
- Egna getters och setters med field
- lateinit och fördröjd initiering