kotlin语法
zhuanlan.zhihu.com残枫cps
目录
收起
语法基础
kotling语言和JVM虚拟机
声明变量和内置数据类型
只读变量
类型推断
编译时常量
kotlin反编译后字节码
kotlin生成字节码文件之后,交给jvm运行,和java一样工具步骤:tools -> kotlin -> show totlin bytecode
引用类型
range表达式
when表达式
String模版
函数头
函数参数的默认参数
Unit函数特点
Noting类型特点
反引号函数名特点
匿名函数
函数类型&隐式返回 :先声明函数,然后实现该函数
函数参数
it关键字特点:函数中参数只有一个时,it相当于所传参数
匿名函数的类型推断:其实就是var method = 方法的实现
lambda
在函数中定义参数是函数:kt中可用于函数回调,但是在java中回调需要定一个的interface
函数内联:inline,有函数参数是lambda为参数
函数引用 ::
函数类型作为返回类型
匿名函数和具名函数
可空性特点
安全调用操作符: ?. 为null的时候,调用代码不执行,后面是代码是可执行的
let的安全调用
非空断言操作符特点
对比使用if判断null值情况
空合并操作符
语法中异常处理与自定义异常特点
先决条件函数
subString:截取字符串
split:分割
replace完成加密解码
==与===比较操作 字符串常量池
字符串遍历
数字类型的安全转换函数
Double转Int与类型格式化
内置函数
apply内置函数:始终返回本身
let内置函数
run内置函数
with内置函数
also内置函数
takeIf内置函数
takeUnless内置函数
集合
List创建于元素获取
可变List集合:MutableList
mutator函数
集合遍历
解构语法过滤元素
Set创建于元素获取
可变Set:MutablseSet
集合转换与快捷函数
数组类型
Map的创建
读取Map的值
Map遍历
可变Map
class类
主构造函数
次构造函数
初始化块:主构造函数的方法体
延迟初始化lateinit
惰性初始化by lazy
初始化陷阱
继承与重载的open关键字
类型转换
智能类型转换
Any超类 == java Object
对象声明:object 单例
对象表达式
伴生对象:companion object == Java内部静态类 kt中没有static静态
内部类与嵌套类
数据类
copy函数
解构声明
运算符重载
枚举类
枚举类定义函数
代数数据类型
密封类
数据类使用条件
接口定义
接口的默认实现
抽象类
范型
范型类定义
范型函数
范型变换
范型类型约束
vararg关键字
out-协变 in-逆变
reified关键字
扩展函数
定义扩展函数
范型扩展函数
扩展属性
可空类型扩展函数
infix关键字 中缀函数
扩展文件 iterable 扩展函数组成的文件,调用的时候import引用
重命名扩展:把引用的扩展函数重新命名,简化函数名
DSL:领域专用语言
变换函数map变换函数flatmap
过滤函数filter
合并函数
函数式编程
Java与kt调用 可空性
单例模式
注解
@JvmName :编译时修改类的名字,方便Java的调用
@JvmFeild:val类成员上面,可以去除类成员get方法,改成public修饰
@JvmOverLoads 把多参数的函数方法重载,Java调用时就可以不用管kt函数的默认参数
@JvmStatic 把一个在伴生匿名对象里的函数变成一个静态函数,方便java调用
手写rxJava
语法基础
kotling语言和JVM虚拟机-
-
声明变量和内置数据类型-
只读变量-
-
类型推断-
编译时常量
-
kotlin反编译后字节码-
kotlin生成字节码文件之后,交给jvm运行,和java一样-
工具步骤:tools -> kotlin -> show totlin bytecode-
引用类型-
-
range表达式-
-
when表达式-
-
String模版-
-
函数头-
-
函数参数的默认参数-
具名函数参数:调用方法不用按特定的顺序-
-
Unit函数特点-
-
Noting类型特点-
-
反引号函数名特点
` ` 这个可以写含有中文和数字的的方法;调用java方法,但是在kotlin中方法名字是关键字,可以把方法名用这个` `包起来就可以调用了-
-
匿名函数-
-
函数类型&隐式返回 :先声明函数,然后实现该函数-
-
函数参数-
-
it关键字特点:函数中参数只有一个时,it相当于所传参数-
-
匿名函数的类型推断:其实就是var method = 方法的实现-
-
lambda-
-
在函数中定义参数是函数:kt中可用于函数回调,但是在java中回调需要定一个的interface
kotlin的写法如下:-
java的写法如下:-
-
函数内联:inline,有函数参数是lambda为参数-
-
函数引用 ::-
-
函数类型作为返回类型-
-
匿名函数和具名函数-
Java的写法:-
-
可空性特点-
-
安全调用操作符: ?. 为null的时候,调用代码不执行,后面是代码是可执行的-
-
let的安全调用-
-
非空断言操作符特点-
-
对比使用if判断null值情况-
-
空合并操作符-
-
语法中异常处理与自定义异常特点-
-
先决条件函数
判断null,抛出异常:checkNotNull requireNotNull-
判断false,抛出异常:require-
-
subString:截取字符串-
-
split:分割-
-
replace完成加密解码-
-
==与===比较操作 字符串常量池
name1和name2是用一个引用,因为:字符串常量池,创建了第一个字符串,创建第二个同样的值时,不会新建,所以name1和name2是同一个引用。-
上面图中的输出值为false
-
字符串遍历-
-
数字类型的安全转换函数-
-
Double转Int与类型格式化
toInt()是取下取整数,去除小数点后面的;图中有错误-
-
内置函数-
-
apply内置函数:始终返回本身-
-
let内置函数-
-
run内置函数-
-
with内置函数-
-
also内置函数-
-
takeIf内置函数
takeIf(boolean) 如果boolean为true,则返回this本身,否则null-
-
takeUnless内置函数-
-
集合
-
List创建于元素获取-
-
可变List集合:MutableList-
-
mutator函数-
-
集合遍历-
-
解构语法过滤元素-
-
Set创建于元素获取-
-
可变Set:MutablseSet-
-
集合转换与快捷函数-
-
数组类型-
-
Map的创建-
-
读取Map的值-
-
Map遍历-
-
可变Map-
-
class类-
-
主构造函数-
-
次构造函数-
-
初始化块:主构造函数的方法体-
构造初始化顺序 :(生成的字节码文件顺序:类成员先声明(可以直接赋值) -> 执行init{}里面的内容 -> 写在init{}后天面的类成员有赋值的再赋值; )-
-
延迟初始化lateinit-
-
惰性初始化by lazy
普通方式-
by lazy :懒汉式-
-
初始化陷阱-
-
继承与重载的open关键字
kt类class默认public final 修饰,所以不能被继承-
kt中函数默认public final 修饰,所以不能被重写-
-
类型转换-
-
智能类型转换-
-
Any超类 == java Object-
-
对象声明:object 单例-
-
对象表达式-
-
伴生对象:companion object == Java内部静态类 kt中没有static静态-
-
内部类与嵌套类-
-
数据类-
-
copy函数-
-
解构声明-
-
运算符重载-
-
枚举类-
-
枚举类定义函数
-
代数数据类型-
-
密封类-
-
数据类使用条件-
-
接口定义-
-
接口的默认实现-
-
抽象类-
-
范型
-
范型类定义-
-
范型函数-
-
范型变换-
-
范型类型约束-
-
vararg关键字-
-
out-协变 in-逆变
-
reified关键字
-
扩展函数
-
定义扩展函数-
-
范型扩展函数-
-
扩展属性-
-
可空类型扩展函数-
-
infix关键字 中缀函数-
-
扩展文件 iterable 扩展函数组成的文件,调用的时候import引用-
-
重命名扩展:把引用的扩展函数重新命名,简化函数名-
-
DSL:领域专用语言-
-
变换函数map
变换函数flatmap
-
过滤函数filter
-
合并函数-
-
函数式编程
-
Java与kt调用 可空性-
-
单例模式
饿汉式-
kt : object ClassName-
懒汉式-
懒汉式加锁 :防止多线程 synchronized-
懒汉式 volatile 线程安全-
-
注解
-
@JvmName :编译时修改类的名字,方便Java的调用-
-
@JvmFeild:val类成员上面,可以去除类成员get方法,改成public修饰-
-
@JvmOverLoads 把多参数的函数方法重载,Java调用时就可以不用管kt函数的默认参数-
-
@JvmStatic 把一个在伴生匿名对象里的函数变成一个静态函数,方便java调用-
-
手写rxJava-