异常类(Exception Classes)
Kotlin中所有的异常类都是Throwable的子类。每个异常都有消息、堆栈回溯信息和可选的原因。
要抛出一个异常对象,使用throw表达式:
throw MyException("Hi There!")
为了捕获一个异常,使用try表达式:
try {
// some code
}
catch (e: SomeException) {
// handler
}
finally {
// optional finally block
}
可以有0到多个catch块,finally块可以省略。但是catch块和finally块至少应该存在一个。
try是一个表达式(Try is an expression)
try是一个表达式,也就是说,它可以有一个返回值:
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
try表达式的返回值要么是try块的最后一个表达式,也哦么是catch块的最后一个表达式。finally块对try表达式的结果没有影响。
检查异常(Checked Exceptions)
Kotlin没有检查异常(编译时异常)。原因有很多,我们仅提供一个简单的例子。例子省略...
Nothing类型(The Nothing type)
在Kotlin中,throw是一个表达式,因此可以将其作为Elvis表达式的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
throw表达式的类型是Nothing。该类型没有值,仅用于标记该代码位置永远不可能到达。在你的代码中,你可以使用Nothing来标记一个永远不会返回的函数:
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
当你调用该函数的时候,编译器将知道执行不会超出调用:
val s = person.name ?: fail("Name required")
println(s) // 's' is known to be initialized at this point
Java互操作性
参见Java互操作性章节...