目录
-
基本数据类型
- 数字
- 字符
- 布尔
- 数组
- 字符串
-
控制流(if/when/for/while)
- if
- when
- for
- while
-
函数与Lambda表达式
-
类与对象
- 继承
- 属性与字段
- 接口
- 内联类
-
注释
-
编码规范
基本数据类型
数字
Type | Bit Width |
---|---|
Double | 64 |
Float | 32 |
Long | 32 |
Int | 32 |
Short | 16 |
Byte | 8 |
字面常量
- 十进制:123
- Long类型用大写L 标记:123L
- 十六进制:0x0F
- 二进制:0b0001011
- 默认Double:123.5、123.5e10
- Float 用f或者F标记:123.5f
数字字面值中的下划线(自1.1起)
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
复制代码
- 对于数字没有隐式拓展转换(如Java中的int可以隐式转换为long)
- kotlin 不支持八进制
- Kotlin 中字符不是数字
字符
布尔
布尔用 Boolean 类型表示,它有两个值:true 与 false。
若需要可空引用布尔会被装箱。
内置的布尔运算有:
- || – 短路逻辑或
- && – 短路逻辑与
- ! - 逻辑非
数组
控制流
if表达式
在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色。
// 传统用法
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作为表达式
val max = if (a > b) a else b
复制代码
if的分支可以是代码块,最后的表达式作为该块的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
复制代码
如果你使用 if 作为表达式而不是语句(例如:返回它的值或者把它赋给变量),该表达式需要有 else 分支。
when
when 取代了类 C 语言的 switch 操作符。其最简单的形式如下
扫描二维码关注公众号,回复:
4593785 查看本文章
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
如果 when 作为一个表达式使用,则必须有 else 分支, 除非编译器能够检测出所有的可能情况都已经覆盖了。
复制代码
while 循环
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y 在此处可见
复制代码
函数
函数的声明
Kotlin 中的函数使用 fun
关键字声明:
fun double(x: Int): Int {
return 2 * x
}
复制代码
定义函数
- 带有两个 Int 参数、返回 Int 的函数:
fun sum(a: Int, b: Int): Int {
return a + b
}
复制代码
- 将表达式作为函数体、返回值类型自动推断的函数:
fun sum(a: Int, b: Int) = a + b
复制代码
- 函数返回无意义的值,
Unit
是一种只有一个值——Unit
的类型。这个值不需要显式返回:
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
复制代码
类与对象
类的成员
- 构造函数与初始化块
- 函数
- 属性
- 嵌套类与内部类
- 对象声明
构造函数
Kotlin
中使用关键字 class
声明类
class Invoice { ... }
复制代码
属性与字段
- 属性可以用关键字var 声明为可变的,否则使用只读关键字val,1、只读属性的用 val开始代替var 2、只读属性不允许 setter。要使用一个属性,只要用名称引用它即可
- getter和setter
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
复制代码
继承
在 Kotlin
中所有类都有一个共同的超类 Any
,这对于没有超类型声明的类是默认超类: