一、异常
Kotlin 中异常处理的基本形式和 Java 类似
fun compute(index: Int): Boolean {
if (index !in 0..10) {
throw IllegalArgumentException("参数错误")
}
return true
}
和 Java 不同的是,Kotlin 中 throw 结构是一个表达式,可以作为另一个表达式的一部分来使用
例如下面这个例子,如果条件不满足,则将抛出异常,从而导致 status 变量也不会初始化
val status = if (index in 0..10) index else throw IllegalArgumentException("参数错误")
此外,在 Java 中对于受检异常必须显式地处理,通过 try/catch 语句捕获异常或者是抛给其调用者来处理。而 Kotlin 不区分受检异常和未受检异常,不用指定函数抛出的异常,可以处理也可以不处理异常
在 Kotlin 中 ,try 关键字引入了一个表达式,从而可以把表达式的值赋给一个变量。如果一个 try 代码块执行正常,代码块中最后一个表达式就是结果,如果捕获到了一个异常,则相应 catch 代码块中最后一个表达式就是结果
看以下例子,如果 try 表达式包裹的表达式会抛出异常,则返回值为 null ,否则为 true
fun main(args: Array<String>) {
compute(5) //fun end : true
compute(100) //fun end : null
}
fun compute(index: Int) {
val status = try {
if (index in 0..10) true else throw IllegalArgumentException("参数错误")
} catch (e: Exception) {
null
}
println("fun end : " + status)
}
但是,如果在 catch 语句中使用 return 结束了 compute 函数,则没有任何输出
fun main(args: Array<String>) {
compute(5) //fun end : true
compute(100) //没有任何输出
}
fun compute(index: Int) {
val status = try {
if (index in 0..10) true else throw IllegalArgumentException("参数错误")
} catch (e: Exception) {
return
}
println("fun end : " + status)
}