Kotlin知识体系图
2017-09-06 16:24:05 75 举报
AI智能生成
Kotlin 知识体系图
作者其他创作
大纲/内容
类和对象
类与继承
类
类声明
可是使用 class 关键字来声明类。类声明由类名、类头(指定其类型参数、主构造函数等)和由大括号包围的类体构成。类头和类体都是可选的; 如果一个类没有类体,可以省略花括号。
类成员
属性
函数
嵌套类和内部类
对象声明
构造函数
构造函数的可见性是 public 的,如果不希望外部创建改类的实例则需要显式的使用可见性修饰符来修饰构造函数
主构造函数
只能有一个
主构造函数是类头的一部分:它跟在类名(和可选的类型参数)后。
使用 constructor 关键字来声明主构造函数。如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。
主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块
主构造的参数可以在初始化块中使用。它们也可以在类体内声明的属性初始化器中使用
主构造函数中声明的属性可以是可变的(var)或只读的(val)
在 JVM 上,如果主构造函数的所有的参数都有默认值,编译器会生成 一个额外的无参构造函数,它将使用默认值
如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且这些修饰符在它前面
次构造函数
可以有一个或多个
如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用 this 关键字即可
如果一个类没有主构造函数和次构造函数,它会有一个不带参数的主构造函数
继承
在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类
如果该基类有一个主构造函数,其子类型可以(并且必须) 用(基类型的)主构造函数参数就地初始化。如果类没有主构造函数,那么每个次构造函数必须使用 super 关键字初始化其基类型,或委托给另一个构造函数做到这一点
类上的 open 标注与 Java 中 final 相反,它允许其他类从这个类继承。默认情况下,在 Kotlin 中所有的类都是 final-要么为继承而设计,并提供文档说明,要么就禁止继承
覆盖方法
与 Java 不同,Kotlin 需要显式标注可覆盖的成员(我们称之为开放)和覆盖后的成员
首先只能覆盖标注了 open 的成员,其次如果覆盖则必须显示的使用 override 标注覆盖后的成员
覆盖成员的前提是类是开放的
属性与字段
接口
可见性修饰符
扩展
数据类
密封类
泛型
嵌套类
枚举类
使用 enum class 来定义一个枚举类
enum 是软关键字,只有在和class一起使用时才具有特殊含义
枚举常量和方法之间要使用分号(;)分割,这是必须的
如果枚举类定义了主构造函数,那么每个枚举常量在创建时必须之地起初始值
对象
委托
委托属性
基础
基本数据类型
整型
Byte
Short
Int
Long
默认整数类型为Int,需要在后面标记L或l
浮点型
Float
默认浮点数类型为Double,需要在浮点数后标记f或
F
Double
布尔型
Boolean
字符型
Char
字符用 Char 表示,不能直接当做数字
显式转换
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
支持的进制
二进制
十进制
十六进制
注意:不支持八进制
注意
不显式转换的情况下不能把较小类型的变量赋值给较大类型
===:内存地址值相等
==:值相等
当需要可空引用时,像数字、字符会被装箱。装箱操作不会保留同一性。
包
声明:package package.name
如果没有显示的声明包名,则使用默认的命名空间
和 Java 不同的是:目录与包的结构无需匹配:源代码可以在文件系统的任意位置
如果两个文件的包名一致,无需导入可以直接使用对方的类和顶层函数、属性
import 的使用方式
import package.name.*
import package.name.funname
import package.name.propertyname
import package.name.classname
import package.name.classname.*
注意
在同一个包下不能存在相同的函数、属性、类
如果在一个文件中导入不同目录下的相同的类、函数、属性,可以使用关键字 as 为不同命名空间下的类、函数、属性起别名
函数
无返回值的函数
有返回值的函数
返回值可为空的函数
表达式主体函数
有默认参数值的函数
变量
var(可变变量)
val(不可变变量)
字符串模板
表达式
if表达式
if 既可以作为语句来使用,也可以作为表达式来使用
如果你使用if作为表达式来使用,那么 else 分支是必须要存在的
when表达式
使用方式
有参数
无参数
一条分支多个选项
任意参数
取代了 switch 操作符,比switch更强大
when 既可以作为语句来使用,也可以作为表达式来使用
如果你使用 when 作为表达式来使用,那么 else 分支是必须要存在的,除非编译器确认分支已经包含所有的可能性
替代 if...else if...else...,可以不提供参数,所有的分支条件都是简单的布尔表达式
在Kotlin中不支持三元表达式
在kotlin中不支持switch
空值和null检查
类型检查和智能类型转换
循环
for循环
while循环
do...while()循环
break、continue
break: 跳出循环
continue: 跳出本次循环,执行下次循环
标签处返回
label@
区间
是否在区间
if(x in x..y)
迭代区间
for(x in items)
集合
List
Set
收藏
收藏
0 条评论
下一页