一. 空安全
? ? ? ?
1.null
? ? ? ? Kotlin会把可能出现null问题,在编译时以报错的方式,提前在编译期强怕我们重视起来,而不是等到运行时报错,防范于未然。
2.Kotlin的null类型
? ? ? ? 在Kotlin中我们可以这样来定义空类型。
//想要把属性设置为空需要在类型处加?
var str:String?= readLine()
str=null
println("input:$str")
3.空安全
? ? ? ? Kotlin区分可空类型和非可空类型,所以你用一个可空类型变量打印或调用函数,而他
有可能不存在,这种情况编辑器会随时报错。
1.安全调用操作符
? ? ? ? ?我们可以使用空安全调用操作符,使用后它会检查属性值,而过为null则不调用
fun main() {
// 加?为空不调用
var str= readLine()?.capitalize()
println("input:$str")
}
? ? ? ? ?安全调用运行在可空类型上调用函数,但是如果还想做点额外的事,比如为空时返回一个字段,我们可以使用let函数,它的主要作用是让你在指定的作用域内定义一个或多个变量。
fun main() {
var str: String? = "butterfly"
str = null
str = str?.let {
if (it.isNullOrBlank()) {
"butterfly"
} else {
it.capitalize()
}
}
println("$str")
}
2.使用非空断言操作符
? ? ? ? !!由称感叹号操作符,当变量值为null时,他会调用后续方法
????????
fun main() {
var str :String? ="butterfly"
str=null
//!! 为空继续执行
print(str!!.capitalize())
}
3.使用if来判断null情况
? ? ? ? 我们也可以使用if判断,但是相比之下安全调用操作符用起来更灵活,更容易链式调用。
fun main() {
var str = readLine()
if (str != null) {
str = str.capitalize()
println(str)
} else {
println("为null.")
}
}
? ? ? ? ? ? ? ? ??
4.空合并操作符
fun main() {
var str: String? = "jack"
str = str?.let { it.capitalize() } ?: "butterfly"
print(str)
}
二.异常
1.抛出异常
class ExceptionFix ():IllegalAccessException("操作异常")
fun main() {
var num:Int? =null;
//如果number为空那么就拋出异常
num ?:throw ExceptionFix()
}
2.处理异常
fun main() {
var num:Int? =null;
try {
num!!.plus(1)
}catch (e: Exception){
print(e)
}
}
3先决条件函数
fun main() {
var num:Int? =null;
try {
checkOperation(num)
// num!!.plus(1)
}catch (e: Exception){
print(e)
}
}
fun checkOperation(number:Int?){
//如果number为空那么就拋出异常
//number ?:throw ExceptionFix()
//如果前面为空就抛出后面 表达式中的内容
checkNotNull(number,{"checkNotNull"})
//如果前面为false就抛出后面 表达式中的内容
require(false,{"require"})
//如果前面为空就抛出后面 表达式中的内容
requireNotNull(number,{"requireNotNull"})
//如果参数为null,则异常,否则抛出表达式中的内容
error(number)
//如果前面为false就异常
assert(true,{"assert"})
}
? ? ??
?
????????
|