文档
Kotlin 现代 JVM 语言入门教程
第一章:为什么选 Kotlin
Java 已经 28 年了,虽然稳健,但包袱很重。Kotlin 站在 Java 的肩膀上,保留了 JVM 生态全部优势,同时:
- 少写 40% 代码(data class、类型推断、扩展函数)
- 消灭 NPE(编译期空安全)
- 协程原生异步支持
- 100% Java 互操作(可混合编译)
Android 开发者已基本全面切换 Kotlin;服务端 Spring Boot + Kotlin 也在快速增长。
第二章:空安全
Kotlin 的类型系统区分「可空」和「不可空」:
var a: String = "abc" // 不可为空
// a = null // ❌ 编译错误!
var b: String? = "abc" // 可空
b = null // ✅ 允许
// 安全调用
println(b?.length) // null → 不执行
// Elvis 操作符
val len = b?.length ?: 0 // null 时给默认值
// 非空断言(谨慎使用)
println(b!!.length) // null → NPE 仍会抛
第三章:协程
协程是 Kotlin 的王牌特性——用同步写法写异步代码:
suspend fun fetchData(): String {
delay(1000) // 挂起函数,不阻塞线程
return "data"
}
// 结构化并发
coroutineScope {
val d1 = async { fetchData() }
val d2 = async { fetchData() }
println(d1.await() + d2.await())
}
核心概念:
suspend:挂起函数,可在协程中调用launch:启动协程,不关心返回值async:启动协程,返回 Deferred(类似 Future)runBlocking:阻塞等协程完成(测试/入口用)
第四章:作用域函数
| 函数 | 对象引用 | 返回值 | 典型场景 |
|---|---|---|---|
let |
it |
Lambda 结果 | 可空对象安全操作 |
run |
this |
Lambda 结果 | 对象配置+计算 |
apply |
this |
对象本身 | 对象初始化 |
also |
it |
对象本身 | 附加操作(日志) |
with |
this |
Lambda 结果 | 对同一个对象的多次操作 |
第五章:与 Java 互操作
// 调用 Java 库
val list = ArrayList<String>()
list.add("Kotlin")
// Java 代码调用 Kotlin
// 在 Java 中:KotlinClassKt.topLevelFunction();
// @JvmStatic 让 Kotlin 伴生对象方法在 Java 中当静态方法用
// @JvmOverloads 为默认参数生成重载
思考题
- Kotlin 的
?.和 Optional 各有什么优劣? - 协程和线程是什么关系?一个线程能跑多少协程?
sealed class和enum class有什么区别?何时用哪个?