0Pricing
Kotlin Academy · Lektion

init-Blöcke und Initialisierungsreihenfolge

Verwenden Sie init-Blöcke und verstehen Sie die Reihenfolge der Initialisierung von Properties und Blöcken.

init-Blöcke und Initialisierungsreihenfolge ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein init-Block?

Ein init { }-Block enthält Code, der bei der Erstellung einer Instanz ausgeführt wird. Er ist Teil der Logik des primären Konstruktors.

Einfacher init-Block

Der init-Block wird während der Erstellung ausgeführt, und zwar nach den Property-Initialisierern in der Reihenfolge ihres Auftretens im Quelltext.

class Logger(val name: String) {
    init {
        println("Constructed Logger("$name")")
    }
}
fun main() {
    val l = Logger("auth")
}

Validierung in init

Verwenden Sie require / check innerhalb von init, um Invarianten zum Zeitpunkt der Erstellung durchzusetzen.

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
}

Mehrere init-Blöcke

Sie können mehrere init-Blöcke verwenden. Sie werden in der Reihenfolge ihres Auftretens im Quelltext ausgeführt, jeweils zwischen den Property-Initialisierern.

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)
}

Reihenfolge von Property-Initialisierern und init

Property-Initialisierer und init-Blöcke werden von oben nach unten in der Reihenfolge ihres Auftretens im Quelltext ausgeführt. Eine Property muss zugewiesen sein, bevor sie verwendet wird.

class Order {
    val createdAt = System.currentTimeMillis()
    init { println("created at $createdAt") }
    val nextId = 1
    init { println("next id = $nextId") }
}
fun main() {
    Order()
}

Properties dürfen vor ihrer Initialisierung nicht verwendet werden

Der Verweis auf eine Property, bevor ihr Initialisierer ausgeführt wurde, führt zu einem Kompilierungsfehler.

class Bad {
    init {
        // println(name) // ERROR: name not yet initialized
    }
    val name = "after init"
}
fun main() { Bad() }

Abgeleitete Properties berechnen

Verwenden Sie init-Blöcke, um einen abgeleiteten Zustand zu berechnen, der von mehreren Konstruktorparametern abhängt.

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
}

Seiteneffekte: Protokollierung

Verwenden Sie init für aufwendigere Einrichtungsarbeiten wie Protokollierung, Speicherreservierung oder Registrierung.

class Service(val name: String) {
    init {
        println("[BOOT] starting service '$name'")
    }
}
fun main() {
    Service("auth")
    Service("payments")
}

Initialisierungsreihenfolge bei Unterklassen

Der init-Block der Oberklasse wird vor dem init-Block der Unterklasse ausgeführt. Die eigenen Properties jeder Klasse werden in der Reihenfolge ihres Auftretens im Quelltext initialisiert.

open class Base {
    init { println("Base init") }
}
class Sub : Base() {
    init { println("Sub init") }
}
fun main() { Sub() }

Aufwendige Logik in init vermeiden

Lang laufende init-Blöcke verlangsamen jede Erstellung. Ziehen Sie eine verzögerte Initialisierung oder Factory-Methoden in Betracht, wenn die Einrichtung aufwendig ist.

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
}

init mit sekundären Konstruktoren kombinieren

Sekundäre Konstruktoren delegieren an den primären Konstruktor; init-Blöcke werden als Teil des primären Pfads ausgeführt.

class Box(val content: String) {
    init { println("init for '$content'") }
    constructor(): this("empty") { println("secondary done") }
}
fun main() {
    Box()
}

Kurze Überprüfung

In welcher Reihenfolge werden mehrere init-Blöcke und Property-Initialisierer in einer Kotlin-Klasse ausgeführt?

Zusammenfassung

init-Blöcke enthalten Logik, die bei der Erstellung ausgeführt wird – Validierung, Berechnung abgeleiteter Properties und Seiteneffekte. Mehrere Blöcke werden in der Reihenfolge ihres Auftretens im Quelltext ausgeführt, jeweils zwischen den Property-Initialisierern. Vermeiden Sie aufwendige Arbeit in init; verwenden Sie stattdessen lazy oder Factory-Methoden.

Häufig gestellte Fragen

Ist die Lektion „init-Blöcke und Initialisierungsreihenfolge“ kostenlos?

Ja — der vollständige Text von „init-Blöcke und Initialisierungsreihenfolge“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „init-Blöcke und Initialisierungsreihenfolge“?

Verwenden Sie init-Blöcke und verstehen Sie die Reihenfolge der Initialisierung von Properties und Blöcken. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „init-Blöcke und Initialisierungsreihenfolge“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Primärkonstruktor und Property-Parameter
  2. init-Blöcke und Initialisierungsreihenfolge
  3. Benutzerdefinierte Getter und Setter mit field
  4. lateinit und verzögerte Initialisierung
← Zurück zu Kotlin Academy