Kotlin 入门教程
FreeGuideOnline
最新
2026-07-15
kotlin fun main() { println("Hello, Kotlin!") }
- `fun` 关键字用于声明函数。
- `main` 是程序入口函数。
- `println()` 输出一行文本。
运行后,控制台会打印出 `Hello, Kotlin!`。
## 三、基本语法
### 3.1 变量与常量
使用 `var` 声明可变变量,`val` 声明只读变量(常量)。
```kotlin
var age: Int = 25 // 可变变量
val name: String = "Alice" // 不可变(类似Java final)
Kotlin 具备类型推断,可以省略类型声明:
var score = 90 // 推断为 Int
val greeting = "Hi" // 推断为 String
3.2 基本数据类型
- 数字:
Int,Long,Float,Double,Short,Byte - 字符:
Char(例如'A') - 布尔:
Boolean(true/false) - 字符串:
String
Kotlin 没有隐式拓宽转换,数字之间必须显式转换:
val i: Int = 10
val l: Long = i.toLong() // 显式转换为 Long
3.3 字符串模板
使用 $ 插入变量值,或 ${} 插入表达式:
val name = "Kotlin"
println("Hello, $name!") // Hello, Kotlin!
println("1 + 2 = ${1 + 2}") // 1 + 2 = 3
四、控制流
4.1 条件表达式:if
if 在 Kotlin 中可作为一个表达式返回结果。
val a = 10
val b = 20
val max = if (a > b) a else b
4.2 when 表达式
取代 Java 的 switch,功能更强大。
when (x) {
1 -> println("x == 1")
2, 3 -> println("x is 2 or 3")
in 4..10 -> println("x is between 4 and 10")
!in 11..20 -> println("x is outside 11 to 20")
is String -> println("x is a String") // 智能类型检查
else -> println("none of the above")
}
4.3 循环
for循环可遍历任何可迭代对象:
for (i in 1..5) {
println(i) // 打印1 2 3 4 5
}
val list = listOf("a", "b", "c")
for (item in list) {
println(item)
}
while与do..while同 C 系语言一致。
五、函数
5.1 函数声明
fun add(a: Int, b: Int): Int {
return a + b
}
如果函数体是单个表达式,可简写:
fun add(a: Int, b: Int) = a + b
5.2 默认参数与具名参数
fun greet(name: String = "Guest", message: String = "Welcome") {
println("$message, $name!")
}
greet() // 使用全部默认值
greet("Alice") // 按顺序赋值
greet(message = "Hello", name = "Bob") // 具名参数
六、空安全(Null Safety)
Kotlin 通过类型系统彻底避免空指针异常。
- 普通类型不可为 null:
var s: String = null会报错。 - 可空类型需加
?:var s: String? = null合法。 - 调用前需进行安全调用
?.或使用!!(非空断言,慎用)。
val length = s?.length // 如果 s 为 null,length 结果为 null,不会抛出异常
val len = s!!.length // 强制告诉编译器 s 不为 null,若为 null 则抛出异常
- 使用
?:运算符提供默认值:
val name: String? = null
val displayName = name ?: "Unknown" // 如果 name 为 null,则 displayName = "Unknown"
七、类与对象
7.1 类声明与实例化
Kotlin 中的类声明非常简洁,不需要 new 关键字。
class Person(val name: String, var age: Int)
val person = Person("Alice", 25)
println(person.name) // 读取属性
person.age = 26 // 修改属性
主构造函数写在类名后边,属性声明与参数合并。
7.2 数据类(Data Class)
专用于保存数据,自动生成 equals()、hashCode()、toString()、copy() 等方法。
data class User(val id: Int, val name: String)
val user1 = User(1, "Bob")
val user2 = user1.copy(name = "Charlie")
println(user1) // User(id=1, name=Bob)
println(user2) // User(id=1, name=Charlie)
println(user1 == User(1, "Bob")) // true
7.3 继承
Kotlin 中所有类默认都是 final,需用 open 关键字允许继承。
open class Animal(val name: String) {
open fun sound() {
println("generic sound")
}
}
class Dog(name: String) : Animal(name) {
override fun sound() {
println("bark")
}
}
八、扩展函数与属性
无需继承即可为现有类添加新功能。
// 为 String 类添加一个新函数
fun String.lastChar(): Char = this[this.length - 1]
println("Kotlin".lastChar()) // 输出 n
也可以添加扩展属性,但只能声明为 val。
val String.secondChar: Char
get() = this[1]
扩展函数在静态作用域内解析,无法重写类内部同名函数,是静态分派的。
九、集合与函数式操作
Kotlin 标准库提供了丰富的集合类型:
List(通常只读listOf,可变mutableListOf)Set(setOf、mutableSetOf)Map(mapOf、mutableMapOf)
常用的高阶函数
val numbers = listOf(1, 2, 3, 4, 5)
// filter 过滤
val evens = numbers.filter { it % 2 == 0 } // [2, 4]
// map 转换
val squared = numbers.map { it * it } // [1, 4, 9, 16, 25]
// 链式调用
val result = numbers.filter { it > 2 }
.map { it * 10 } // [30, 40, 50]
// reduce 累积
val sum = numbers.reduce { acc, i -> acc + i } // 15
// find, any, all 等
val hasEven = numbers.any { it % 2 == 0 } // true
十、协程入门简介
Kotlin 协程是官方提供的异步编程解决方案,能以同步方式编写异步代码。
需添加库 kotlinx.coroutines。一个极简例子:
import kotlinx.coroutines.*
fun main() = runBlocking { // 启动一个协程作用域
launch { // 启动一个新协程
delay(1000L) // 挂起1秒(不阻塞线程)
println("World!")
}
println("Hello,") // 主协程继续执行
delay(2000L) // 等待足够时间使子协程完成
}