val 常量 var 变量
条件语句 when关键字 可替代if条件语句
Lateinit关键字 推出属性初始化
SAM转换 单一抽象方法转换
伴生对象 companion object 与某个类相关的变量或函数 类似于使用static修饰
属性委托 关键字 by使用反射 提供整个应用中重复使用的通用实现
Kotlin默认内部类静态;
a<b顺序迭代一个区间用 in a..b
a>b逆序迭代一个区间用 a downTo b
枚举:一组有限数量的值;
密封类:一组有限数量的子类;sealed关键字
尽可能多地使用不可变变量 val
var 是可变变量,对应Java中的普通变量;
Kotlin抛弃Java常用的隐式转换,使用显示转换;toLong()、toDouble()等
字符串
字符串模板在变量前使用$,如果是复杂变量可以用花括号括起来{}; 原始字符串使用三个双引号表示,保留复杂文本的格式;
数组
Kotlin使用arrayOf()来创建数组,根据传入值做类型推导;Kotlin中数组和集合统一使用.size()获取长度;
函数
使用fun关键字来定义函数; 新特性:命名参数,允许在调用函数时传入参数名,增加了可读性和易维护性; 支持默认参数值,有默认值的参数可传可不传;替代builder模式的同时,可读性也很强;
流程控制
if、when、for、 while关键字
Elvis表达式,简写了if当作表达式的判空情况;
when配合->适用大于两个逻辑分支的情况,也可作为表达式,为变量赋值;
while、for都可以用作循环,for更常用于迭代,配合in-迭代、downTo-逆序迭代、step-步长 关键字
类
定义比较简洁,可省略get&set方法;
自定义getter通过自定义get()方法,可以改变返回值的规则;
自定义属性setter,在自定义set()方法中加入逻辑;
抽象类
使用冒号:来表示继承;
open
正常的类使用open关键字修饰,也可以被继承; 默认不可被继承,类和方法都需要open修饰才可以被继承;
接口和实现
interface修饰 接口的方法可以有默认实现,同时也可以拥有属性;(这是与Java最大不同)
嵌套
嵌套类默认是外部类的静态内部类,如果想作为普通内部类需要加上inner关键字; 默认静态防止内部类拥有外部类的引用;
数据类
前面用 data 关键字修饰; 数据类的解构声明可以创建一连串变量; 数据类默认实现copy方法实现浅拷贝,同时支持修改某个属性;
密封类
sealed关键字; 枚举和对象的结合体,支持when表达式提供判断完备性; 枚举中的值对应密封类中的子类;
不管是val还是var,只要基础变量可能为空,就会被转换为Java的包装类型; 相反,只要基础变量不可能为空,该变量就会被转换为Java的原始类型;