Kotlin基础
- 一.Kotlin介绍
- 1.诞生
- 2.Kotlin与JVM
- 3.为什么学习kotlin?
- 4.Kotlin跨平台特性
- 二.变量+常量+类型+条件语句+函数
- 1.声明变量
- 2.内置数据类型
- 3.只读变量
- 4.类型推断
- 5.编译时常量
- 6.条件语句:表达式
- 7.String模板
- 8.函数
- 三.匿名函数+函数类型+高阶函数(重点)
- 1.匿名函数
- 2.函数类型与隐式返回
- 3.函数参数
- 4.it关键字
- 5.匿名函数类型推断(简写代码,只有匿名函数有,具名函数没有)
- 6.lambda表达式(重点面试必问)
- 7.高阶函数(重点面试必问)
- 8.内联函数(重点面试必问)
- 9.lambda和匿名内部类接口回调
- 四.null安全与异常
- 1.null安全
- 2.异常
- 五.字符串操作+数字类型+标准库函数
- 1.字符串操作
- 2.数字操作
- 3.标准库函数
- 六.集合:List+Set+Map
- 0.数组
- 1.List
- 2.Set
- 3.Map
- 七.对象+接口+抽象类
- 1.定义类创建对象
- 八.泛型
- 九.扩展
- 十.函数式编程
- 十一.Kotlin与java互操作
- 十二.协程
一.Kotlin介绍
1.诞生
2.Kotlin与JVM
3.为什么学习kotlin?
4.Kotlin跨平台特性
二.变量+常量+类型+条件语句+函数
1.声明变量
2.内置数据类型
没有基本数据类型,只有引用类型,但是编译器会将部分引用类型编程成基本数据类型,看编译后的字节码文件。
3.只读变量
4.类型推断
5.编译时常量
6.条件语句:表达式
7.String模板
8.函数
(1)函数头
(2)函数参数
(3)Unit函数
三.匿名函数+函数类型+高阶函数(重点)
1.匿名函数
2.函数类型与隐式返回
函数类型格式:(输入参数类型)->返回类型
- 无输入参数也无返回值:() -> Unit
- 无输入参数返回值为String类型:()->String
- 输入参数为String类型,返回值是String类型:(String)->String
3.函数参数
4.it关键字
5.匿名函数类型推断(简写代码,只有匿名函数有,具名函数没有)
6.lambda表达式(重点面试必问)
7.高阶函数(重点面试必问)
参数为函数类型或者返回值为函数类型的函数为高阶函数
(1)定义参数为函数类型的函数
fun main(){
//1。匿名函数
val printUserChinese = {username:String,age:Int->
"姓名=$username 年龄=$age"
}
val printUserEnglish = {username:String,age:Int->
"name=$username age=$age"
}
//2。将匿名函数作为参数
println(show("姚甜雪",18,printUserChinese))
println(show("姚甜雪",18,printUserEnglish))
//3。简写
println(show("姚甜雪",19,{ username: String, age: Int ->
"简写username=$username 简写age=$age"
}))
//4。最终简写
println(show("姚甜雪",19) { username: String, age: Int ->
"简写username=$username 简写age=$age"
})
//5。温故it
var countL = "helloll".count() {
it == 'l'
}
println(countL)
}
//printUser:参数名称 (String,Int)->String:参数类型是函数 输入参数是String,Int,输出参数是String
fun show(username:String,age:Int,printUser:(String,Int)->String):String{
return printUser(username,age)
}
(2)定义返回值为函数类型的函数
8.内联函数(重点面试必问)
9.lambda和匿名内部类接口回调
四.null安全与异常
1.null安全
//1.可空性
var str:String? = "abc"
str = null
//2.安全调用操作符
str?.toString()
//3。非空断言操作符
str!!.toString()
//4.使用let函数的安全调用(经常使用):不为null时调用里面的
str?.let {
if(it.isNotBlank()){//不为""
it.capitalize()//转大写
}else{
"abc"
}
}
//5.空合并操作符:如果为空执行右边,如果不为空执行左边
str = str ?: "demo"
println(str)
//6.let和空合并结合使用
str = str?.let {
it.capitalize()
} ?:"demo"
2.异常
五.字符串操作+数字类型+标准库函数
1.字符串操作
/*****字符串******/
//字符串截取
val index = NAME.indexOf("o")
val str = NAME.substring(0 until index )
println(str)
//切割
val data = NAMES.split(",")
println(data[0])
//切割解构语法
val (n1,n2,n3) = NAMES.split(",")
println("$n1 $n2 $n3")
//替换
val strr = "xiaoming,danni,xiaohong!"
val str2 = strr.replace(Regex("[xio]")){
when(it.value){
"x"-> "1"
"i"-> "2"
"o"-> "3"
else->it.value
}
}
println(str2)
//==和===:==判断内容 ===判断地址
val str3 = "Jason"
val str4 = "Jason"
println(str3 == str4)//true
println(str3 === str4)//true
val str33 = "Jason"
val str44 = "jason".capitalize()
println(str3 == str4)//true
println(str3 === str4)//false
//遍历
strr.forEach {
println("$it")
}
2.数字操作
/*****数字类型安全转换******/
//val number:Int = "8.98".toInt()//报错
// println(number)
val number1:Int? = "8.98".toIntOrNull()
println(number1)
/*****Double转Int数字格式化******/
println(8.985678.toInt())
println(8.985678.roundToInt())//四舍五入
val s:String = "%.2f".format(8.985678)//保留2位小树
println(s)
3.标准库函数
(1)apply
(2)let
(3)run
执行函数引用,效果更加明显
(4)with
(5)also
(6)takeIf
(7)takeUnless
六.集合:List+Set+Map
0.数组
1.List
(1)List的创建和取值
(2)可变列表
(3)mutator函数
(4)集合遍历
(5)解构
2.Set
(1)Set集合的创建和取值
(2)可变集合
3.Map
(1)Map集合的创建
(2)读取map
(3)遍历
(4)可变集合