Exceptions
In Kotlin gibt es keine geprüften Exceptions: Du musst Fehler nicht deklarieren oder zwingend abfangen. try ist ein Ausdruck.
class MeinFehler(msg: String) : Exception(msg)
fun parse(s: String): Int = try {
s.toInt()
} catch (e: NumberFormatException) {
-1
} finally {
println("geprüft: $s")
}
fun main() {
println(parse("42"))
println(parse("x"))
try {
throw MeinFehler("eigener Fehler")
} catch (e: MeinFehler) {
println("${e.javaClass.simpleName}: ${e.message}")
}
try {
val l = listOf(1)
println(l[5])
} catch (e: IndexOutOfBoundsException) {
println("Index ungültig")
} catch (e: Exception) {
println("anderes")
}
val ergebnis = try { 1 / 0 } catch (e: ArithmeticException) { 0 }
println(ergebnis)
}gepr?ft: 42 42 gepr?ft: x -1 MeinFehler: eigener Fehler Index ung?ltig 0
Ressourcen und Dateien
use schließt Ressourcen automatisch (wie try-with-resources):
import java.io.File
fun main() {
val datei = File.createTempFile("demo", ".txt")
datei.writeText("Zeile 1\nZeile 2\nZeile 3\n")
datei.appendText("Zeile 4\n")
println(datei.readText().length)
println(datei.readLines())
datei.bufferedReader().use { r ->
println(r.readLine())
}
datei.forEachLine { print("[${it.length}]") }
println()
println(datei.readLines().map { it.split(" ")[1].toInt() }.sum())
println(datei.exists())
datei.delete()
println(datei.exists())
}32 [Zeile 1, Zeile 2, Zeile 3, Zeile 4] Zeile 1 [7][7][7][7] 10 true false
Mit Java zusammenarbeiten
Kotlin nutzt alle Java-Bibliotheken direkt und umgekehrt:
import java.util.ArrayList
import java.util.Collections
import java.time.LocalDate
import java.util.concurrent.atomic.AtomicInteger
fun main() {
val liste = ArrayList<Int>()
liste.addAll(listOf(3, 1, 2))
Collections.sort(liste)
println(liste)
val datum = LocalDate.of(2025, 3, 15)
println(datum.plusDays(20))
println(datum.dayOfWeek)
val zaehler = AtomicInteger()
val threads = (1..4).map { Thread { repeat(1000) { zaehler.incrementAndGet() } } }
threads.forEach { it.start() }
threads.forEach { it.join() }
println(zaehler.get())
val sb = java.lang.StringBuilder("abc").reverse()
println(sb)
}[1, 2, 3] 2025-04-04 SATURDAY 4000 cba
Weitere Hinweise zur Zusammenarbeit:
@JvmStatic,@JvmField,@JvmOverloadsformen Kotlin-Code für Java-Aufrufer- Java-Typen ohne Nullbarkeits-Angabe heißen Plattformtypen (
String!): hier prüft Kotlin nicht, also vorsichtig sein - Java-Getter/Setter erscheinen als Eigenschaften (
obj.namestattobj.getName())
Merke
- Keine geprüften Exceptions,
tryist ein Ausdruck useschließt Ressourcen automatischFile.readText,readLines,writeText,appendTextfür Dateien- Alle Java-Bibliotheken sind direkt nutzbar
Aufgabe
Schreibe Zeilen in eine temporäre Datei, lies sie wieder ein und zähle die Wörter.