前言
Kotlin是一种在Java虚拟机上执行的静态型别程式语言,它也可以被编译成为JavaScript原始码。(维基百科)
编译器
下载依赖
查看版本
编译并生成字节码文件
Main.kt:Kotlin源码
Main.jar:Java可执行文件
1
| kotlinc Main.kt -include-runtime -d Main.jar
|
主函数
Main.kt1 2 3
| fun main(args: Array<String>) { ... }
|
注释
语句分隔符
- 多行代码写作一行时,语句与语句之间必须使用
;作为语句分隔符
输出语句
输入语句
1
| var 变量名: String = readln()
|
变量
声明变量
定义变量
自动类型推导
变量赋值
常量
定义常量
数据类型
| 类型 |
描述 |
取值范围 |
值表示方法 |
UByte |
无符号8位整数 |
0~255 |
0u |
UShort |
无符号16位整数 |
0~65535 |
0u |
UInt |
无符号32位整数 |
0~4294967295 |
0u |
ULong |
无符号64位整数 |
0~18446744073709551615 |
0u、0uL |
Byte |
有符号8位整数 |
-128~127 |
0 |
Short |
有符号16位整数 |
-32768~32767 |
0 |
Int |
有符号32位整数 |
-2147483648~2147483647 |
0 |
Long |
有符号64位整数 |
-9223372036854775808~9223372036854775807 |
0L |
Float |
32位浮点型数 |
0.0F |
|
Double |
64位浮点型数 |
0.0 |
|
Boolean |
布尔型 |
|
true、false |
Char |
字符型 |
|
'' |
String |
字符串型 |
|
"" |
Array |
数组 |
|
IntArray、DoubleArray、Array<?> |
1 2 3 4 5 6 7 8 9 10 11 12 13
| var a: Byte = 0
var b: Short = 0
var c: Int = 0
var d: Long = 0L
var e: ULong = 0uL
var f: Float = 0.0f
var g: Double = 0.0
|
进制表示
在Kotlin语言中不能直接表示八进制数据
描述十六进制的数值,需要以0x开头
长数字分隔符
英式数字分隔法
1
| var oneBillion = 1_000_000_000
|
中式数字分隔法
1
| var oneBillion = 10_0000_0000
|
应用于二进制数
1
| var binary = 0b0000_0000
|
应用于十六进制数
1
| var hexadecimal = 0xFFFF_FFFFu
|
区间
闭区间
1
| var 变量名: IntRange = 1..10
|
左闭右开
1
| var 变量名: IntRange = 1 until 10
|
字符串
原始字符串
- 原始字符串会保留空白字符、换行符、制表符
- 原始字符串会忽略字符串中的转义字符
模板字符串
1 2 3
| var num = 1
println("文本内容$num")
|
模板字符串
1 2 3
| var num = 1
var 变量名 = "文本内容${num}"
|
1 2 3
| var num = 1
var 变量名 = "文本内容$num"
|
为数据类型定义别名
运算符
算术运算符
+(正号)、-(负号)
+(加号)、-(减号)、*、/、%
++(自增)、--(自减)
关系运算符
逻辑运算符
赋值运算符
按位运算符
and(按位与)、or(按位或)、xor(按位异或)、inv(按位取反)、shl(有符号数左移)、shr(有符号数右移)、ushr(无符号数右移)
将1左移1位
将1按位取反
包含运算符
分支语句
if语句
1 2 3
| if (布尔表达式) { 布尔表达式成立时执行的代码 }
|
1 2 3 4 5
| if (布尔表达式) { 布尔表达式成立时执行的代码 } else { 布尔表达式不成立时执行的代码 }
|
1 2 3 4 5 6 7
| if (布尔表达式1) { 布尔表达式1成立时执行的代码 } else if (布尔表达式2) { 布尔表达式2成立时执行的代码 } else { 以上布尔表达式都不成立时执行的代码 }
|
1 2 3 4 5
| if (布尔表达式1) { if (布尔表达式2) { 布尔表达式1和2都成立时执行的代码 } }
|
- Kotlin的
if语句可以返回结果,最后一行表达式表示返回值
1 2 3
| var 变量名 = if (布尔表达式) { 返回值 }
|
when语句
- Kotlin的
when语句不具有穿透行为,在每个case语句中,无需使用break跳出when语句
1 2 3 4 5 6 7 8 9 10 11
| when (变量名) { 值1 -> { 变量值为值1时执行的代码 } 值2 -> { 变量值为值2时执行的代码 } else -> { 变量值不为以上任何值时执行的代码 } }
|
1 2 3 4 5 6 7 8 9 10 11
| when (变量名) { in 范围1 -> { 变量在区间范围1时执行的语句 } in 范围2 -> { 变量在区间范围2时执行的语句 } else -> { 变量不在以上任何区间时执行的语句 } }
|
1 2 3 4 5
| when (变量名) { 值1 -> 变量值为值1时执行的代码 值2 -> 变量值为值2时执行的代码 else -> 变量值不为以上任何值时执行的代码 }
|
1 2 3 4 5
| when (变量名) { 范围1 -> 变量在区间范围1时执行的语句 范围2 -> 变量在区间范围2时执行的语句 else -> 变量不在以上任何区间时执行的语句 }
|
- Kotlin的
when语句可以返回结果,最后一行表达式表示返回值
1 2 3
| var 变量名 = when (变量名) { 值1 -> 返回值 }
|
循环语句
while语句
1 2 3
| while (布尔表达式) { 布尔表达式成立时反复执行的代码 }
|
do…while语句
1 2 3
| do { 布尔表达式成立时反复执行的代码 } while (布尔表达式)
|
for…in语句
遍历可迭代对象
1 2 3
| for (元素 in 可迭代对象) { ... }
|
遍历区间
从小到大
1..10:区间
1 2 3
| for (变量名 in 1..10) { ... }
|
step 1:步长,缺省值为1
1 2 3
| for (变量名 in 1..10 step 1) { ... }
|
从大到小
1 2 3
| for (变量名 in 1 downTo 10) { ... }
|
1 2 3
| for (变量名 in 1 downTo 10 step 1) { ... }
|
break关键字
1 2 3 4 5
| outer@ while (true) { while (true) { break@outer } }
|
continue跳出当前循环
1 2 3
| while (true) { continue }
|
1 2 3 4 5
| outer@ while (true) { while (true) { continue@outer } }
|
完成
参考文献
哔哩哔哩——青空の霞光