一、null安全
- Kotlin把运行时间可能会出现的null问题,以编译时错误的方式,提前在编译期,而不是等到运行时报错,防患于未然,提高了程序的健壮性。
- 可空性
在Kotlin中,除非另有规定,变量不可为null值,即默认变量不为空,不能给非空类型变量赋null值
- Kotlin不允许在可空类型值上调用函数,除非你主动接受安全管理
安全调用操作符
安全调用允许可空类型上调用函数,编译器看到有安全调用安全符,如果遇到null值,就跳过函数调用,而不是返回null
使用带let的安全调用
当输入不为空时,调用let函数
var letter = readLine()?.let {
if (it.isNotBlank()) {
it.capitalize()
} else {
"butterfly"
}
}
非空断言操作符 !!
当变量值为null时,会抛出空指针异常
空合并操作符 ?:
如果左边的求值为null,就使用右边的结果值
二、异常
自定义异常
class MyException : IllegalArgumentException("操作不当")
抛出异常
throw Exception("Hi There!")
异常处理
try {
// 一些代码
}
catch (e: SomeException) {
// 处理程序
}
finally {
// 可选的 finally 块
}
Nothing类型
-
在 Kotlin 中 throw 是表达式,所以你可以使用它(比如)作为 Elvis 表达式的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
-
throw 表达式的类型是特殊类型 Nothing。 该类型没有值,而是用于标记永远不能达到的代码位置。 在你自己的代码中,你可以使用 Nothing 来标记一个永远不会返回的函数:
fun fail(message: String): Nothing { throw IllegalArgumentException(message) }
先决条件函数
先决条件函数定义了先决条件,若条件满足,目标代码才能执行
fun check(letter : String?): String{
val s = checkNotNull(letter) { "something 不好" }
return s
}