Kotlin入门第三节
自定义异常及处理
package com.fyx.s1
import java.lang.Exception
fun main() {
try {
var name: String? = null
checkException(name)
name!!.length
} catch (e: Exception) {
println(e)
}
}
fun checkException(name: String?) {
name ?: throw NullExcption()
}
class NullExcption : IllegalAccessException("自定义异常报错")
值比较和引用比较
package com.fyx.s1
import java.lang.Exception
fun main() {
var name1: String = "Jack"
var name2: String = "Jack"
//==比较的是值 所以等于true
if (name1 == name2) println(true) else println(false)
//jvm底层维护的常量池所以为true
if (name1 === name2) println(true) else println(false)
//先定义了一个jack发现常量池配没有便分配了一个新的引用地址,然后调用函数改变值,但是地址值没有改变引用,所以是false
var name3 = "jack".capitalize()
println(name3)
}
字符串遍历
package com.fyx.s1
import java.lang.Exception
fun main() {
var name: String = "ASDSADSADSJAIDJISAJDI"
name.forEach {
//默认有一个参数it
//println(it)
//也可重写参数名称
data ->
println(data)
}
}
安全类型转换函数
package com.fyx.s1
import java.lang.Exception
fun main() {
var ints1: Int = "127".toInt();
//报错
//var ints2: Int = "127.1".toInt();
//安全转换函数 如果转换错误就用Null代替
var ints3: Int? = "127.1".toIntOrNull();
println(ints3)
}
apply函数和let函数 和run函数和with函数和also
- apply 的函数始终返回当前对象,内部的默认值为this
- let 返回值根据最后一行的类型作为推断,域对象为it
- run 函数的返回值是根据最后一行代码推断出来的,域对象为this
- with 函数不能用点去调用,可以直接声明调用,返回值根据最后一行的代码最推断,域对象为this
- also 函数始终返回当前对下那个,域对象为it
他们统一都支持链式调用,类似下面apply的示例 除了with不可以
package com.fyx.s1
fun main() {
//apply
var name12 = "SIAJDIASJDOIASJDOJASD"
name12.apply {
println("字符串的长度$length ")
}.apply {
println("字符串的最后一位值${this[length - 1]} ")
}.apply {
println("字符串大小转换${this.toLowerCase()} ")
}
//let
var name = "123"
name.let {
"字符串组合${1 + it.toInt()} "
}
//run
var name1 = "123"
//匿名调用
var mes = name1.run {
"字符串组合${1 + this.toInt()} "
54
}
//具名调用
.run { ::compertTO }
//with
var name4 = "123"
var num: Int = with(name4, {
println(name4)
this.length
})
//具名调用
with(name4, ::compertTO1)
//also
var name12 = "xixi"
//匿名调用
name12.also {
println(it)
}
//具名调用
name12.also(::print)
}
fun compertTO(num: Int): String {
println("进入函数")
if (num < 10) {
return "你好小"
} else {
return "你很大"
}
}
fun compertTO1(num: String): String {
println("进入函数")
return num
}
takeIf 函数和takeUnless函数
- takeIf 函数需要传入一个返回boolean类型的函数,如果返回为true,那么names是当前对象,如果是false那么names则是null
- takeUnless和takeIf相同,只不过true返回null,false返回当前本身
package com.fyx.s1
fun main() {
var name = "Admin"
var names =name.takeIf(::iftest)
println(names)
}
fun iftest(name: String): Boolean {
return if (name == "Admin") true else false
}