Kotlin 现代 JVM 语言入门

知识库
知识库文档
/tech-stacks/kotlin/tutorial/Kotlin 现代 JVM 语言入门.md

文档

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 为默认参数生成重载

思考题

  1. Kotlin 的 ?. 和 Optional 各有什么优劣?
  2. 协程和线程是什么关系?一个线程能跑多少协程?
  3. sealed classenum class 有什么区别?何时用哪个?

信息

路径
/tech-stacks/kotlin/tutorial/Kotlin 现代 JVM 语言入门.md
更新时间
2026/5/31