目录
变量
- val:声明一个不可变的变量
- var:声明一个可变的变量
显示声明变量类型:val a:Int=10
Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型
函数
形式:fun(参数):返回值类型
参数格式:参数名:参数类型
程序逻辑控制
if条件语句
可以带返回值,返回值就是每一个条件中最后一行代码的返回值
when语句
- 具有返回值
- 允许传入任意类型的参数,在when结构体中定义一系列的条件,格式是:匹配值->{执行逻辑},执行逻辑只有一行时,{}可以省略
- 不带参数的用法
循环语句
for-in
- 区间:…表示闭区间,until表示左闭右开区间,downTo表示降序区间
面向对象编程
继承
一个类要被继承,需要做两件事:
- 使一个类可以被继承:open关键字(Kotlin默认一个非抽象的类使不可以被继承的)
- 使用“:继承类()”的形式继承一个类,括号表示子类构造函数调用了父类的无参数的构造函数
- 子类中的构造函数必须调用父类中的构造函数
构造函数
- 主构造函数:
- 每个类默认会有一个不带参数的主构造函数
- 没有函数体,参数直接定义在类名后面,函数体使用init{}代码块
- 次构造函数:
- 所有的次构造函数都必须调用主构造函数
接口
- 使用:来实现接口,多个接口间使用逗号分割
Kotlin可见性修饰符
- private:只对当前类可见
- public:对所有类可见
- protected:对当前类及其子类可见
- internal:对同一模块内可见
数据类和单例类
- data class 表示数据类,自动生成equals(),hashCode(),toString()等方法,当类中没有方法时,还可以将尾部的大括号去掉
- object class 表示单例类,即可直接调用单例类中的方法
集合创建
- listOf()/setOf()/mapOf():创建不可变的集合
- mutableListOf()/mutableSetOf()/mutableMapOf():创建可变的集合
Lambda表达式
- 定义:一小段可以作为参数传递的代码
- 结构:{参数名1:参数类型,参数名2:参数类型->函数体}
集合中常见的函数式API
- maxBy
- map:对集合中的元素进行映射转换
- filter:过滤集合中的数据
- any:判断是否至少存在一个元素满足条件
- all:判断是否所有元素满足条件
Java函数式API的使用
- 调用Java方法时也可以使用函数式API,限制是,该方法接收一个Java单抽象方法接口参数
Kotlin中匿名类写法
object:类名
可空类型系统
- Kotlin将空指针异常的检查提前到了编译期,如果我们的程序存在空指针异常风险,编译时会直接报错。
- 类名后加?表示可以为空
- 辅助判空工具:
- ?. 对象不为空正常调用方法,为空什么都不做
- ?:: 如果左边表达式的结果不为空就返回左边表达式的结果,否则返回右边表达式的结果
- let 该函数提供了函数式API借口,并将原始调用对象作为参数传递到Lambda表达式中
Kotlin语法糖
- 当函数只有一行代码,可以不必编写函数体,直接将唯一的一行代码写在函数定义的尾部,中间用=号连接
- 当Lambda参数时函数的最后一个参数,可以将Lambda表达式移到函数括号的外面
- 如果Lambda表达式时函数的唯一一个参数,还可以将函数的括号省略
- Lambda表达式在大多数情况下,不必声明参数类型
- 当Lambda表达式只有一个参数的时候,不必声明参数名,可以使用it来代替