Kotlin 基础教程:现代 JVM 语言入门

FreeGuideOnline 最新 2026-06-13

Kotlin 基础教程:现代 JVM 语言入门

Kotlin 是一门运行在 Java 虚拟机(JVM)上的静态类型编程语言,由 JetBrains 开发。它完全兼容 Java,同时提供了更简洁、安全和表达力更强的语法。本教程将带你从零开始掌握 Kotlin 的核心基础,适合拥有基本编程概念的初学者。


为什么选择 Kotlin

  • 简洁:大幅减少样板代码,相同逻辑 Kotlin 通常只需 Java 的一半行数。
  • 安全:类型系统中内建空安全,杜绝 NullPointerException
  • 互操作:与 Java 100% 兼容,可以无缝调用 Java 库,甚至混合编写。
  • 多平台:支持 Android 开发、后端(Spring Boot)、前端(Kotlin/JS)及原生应用。
  • 现代特性:支持函数式编程、扩展函数、协程等,提升开发效率。

自 2017 年 Google 宣布 Kotlin 为 Android 官方开发语言后,其社区和生态迅速成长,成为 JVM 生态中最受欢迎的现代语言之一。


环境搭建

安装 JDK

Kotlin 运行在 JVM 上,需要 JDK(Java Development Kit)8 或更高版本。

  • 访问 Oracle JDK 或开源版本 Adoptium 下载安装。
  • 安装后,打开终端验证:
java -version
javac -version

安装 IntelliJ IDEA

IntelliJ IDEA 是 JetBrains 官方 IDE,对 Kotlin 支持最佳。

  • 下载 IntelliJ IDEA Community Edition(免费)。
  • 安装完成后,启动并创建新项目,在左侧模板中选择 Kotlin,选择 JVM | IDEA,填写项目名称。

创建第一个 Kotlin 文件

src 目录下新建 Main.kt,编写下面的代码:

fun main() {
    println("Hello, Kotlin!")
}

点击绿色三角运行,控制台会输出 Hello, Kotlin!


基本语法

变量声明

Kotlin 使用 val 声明只读变量(类似 Java 的 final),使用 var 声明可变变量。

val name: String = "Kotlin"  // 类型可省略,编译器能自动推断
var age = 5                  // 推断为 Int
age = 6                      // 正确
// name = "Java"             // 错误,val 不可重新赋值

数据类型

Kotlin 没有基本类型和包装类的区分,所有类型都是对象。

类型 位宽 实例
Double 64 3.14
Float 32 3.14f
Long 64 123L
Int 32 123
Short 16 123
Byte 8 123
Char 16 'A'
Boolean 1 true / false
String - "hello"

字符串模板

字符串内可以通过 $ 直接引用变量,或者用 ${} 放入表达式。

val name = "World"
println("Hello, $name!")          // Hello, World!
println("Sum is ${1 + 2}")       // Sum is 3

注释

与 Java 相同,支持单行注释 // 和多行注释 /* */


控制流

if-else 表达式

Kotlin 中 if 是表达式,可以直接返回值。

val max = if (a > b) a else b    // 直接赋值

when 表达式

when 替代 switch,功能更强大,可匹配任意对象、范围、类型等。

val x = 3
when (x) {
    1 -> println("x is 1")
    2, 3 -> println("x is 2 or 3")
    in 4..10 -> println("x between 4 and 10")
    !in 10..20 -> println("x out of range")
    is Int -> println("x is Int")
    else -> println("default")
}

循环

  • for 循环遍历任何提供了迭代器的对象。
for (i in 1..5) println(i)          // 1 2 3 4 5
for (i in 5 downTo 1) println(i)    // 5 4 3 2 1
for (i in 1..10 step 2) println(i)  // 1 3 5 7 9
  • whiledo-while 与 Java 相同。
var x = 5
while (x > 0) {
    println(x--)
}

函数

函数定义

使用 fun 关键字,参数类型后置,返回类型写在参数列表后。

fun add(a: Int, b: Int): Int {
    return a + b
}

单表达式函数

当函数体只有一个表达式时,可省略花括号和 return

fun add(a: Int, b: Int) = a + b

默认参数与命名参数

参数可以指定默认值,调用时可按名称指定参数,顺序可变。

fun greet(name: String = "Guest", prefix: String = "Hello") {
    println("$prefix, $name!")
}
greet()                     // Hello, Guest!
greet(name = "Alice")       // Hello, Alice!
greet(prefix = "Hi")        // Hi, Guest!

单位类型 Unit

不返回值的函数返回类型为 Unit,可省略。

fun printMessage(msg: String): Unit {
    println(msg)
}

空安全

Kotlin 在类型系统中明确区分可空类型与非空类型,杜绝空指针异常。

可空类型

在类型后加 ? 表示可为 null

var name: String = "Kotlin"
// name = null           // 编译错误
var nullableName: String? = "Kotlin"
nullableName = null      // 正确

安全调用操作符 ?.

如果对象非空,则执行方法或访问属性;若为空,则返回 null

val length = nullableName?.length   // 结果为 Int? 类型

Elvis 操作符 ?:

当左侧表达式为 null 时,返回右侧的值。

val len = nullableName?.length ?: 0   // len 为 Int 类型,安全保证

非空断言 !!

明确告诉编译器对象一定非空,若实际为空则抛出 NPE。

val notNullName: String = nullableName!!  // 谨慎使用

安全转换 as?

如果转换失败返回 null,而不抛出异常。

val aInt: Int? = someObject as? Int

类与对象

类定义与构造函数

Kotlin 类可以声明一个主构造函数(在类头中)和多个次构造函数。

// 主构造函数直接写在类名后
class Person(val name: String, var age: Int)

// 若需要初始化代码,可放在 init 块中
class Person(val name: String) {
    init {
        println("Person created: $name")
    }
}

创建实例不需要 new 关键字:

val person = Person("Alice", 30)

属性

Kotlin 自动为构造函数中的 val/var 生成字段和 getter/setter(var 有 setter)。

class Rectangle(var width: Int, var height: Int) {
    val area: Int
        get() = width * height   // 自定义 getter
}

继承与接口

默认类是 final 的,需要加 open 才可继承。方法覆盖必须加 override

open class Animal(val name: String) {
    open fun sound() = println("$name makes a sound")
}
class Dog(name: String) : Animal(name) {
    override fun sound() = println("$name barks")
}

接口定义与 Java 类似,但可以有默认实现。

interface Moveable {
    fun move()
    fun stop() { println("Stopped") }
}

数据类

使用 data class 自动生成 equals()hashCode()toString()copy() 等方法。

data class User(val id: Int, val name: String)
val user1 = User(1, "Alice")
println(user1)  // User(id=1, name=Alice)

对象声明与伴生对象

object 关键字直接定义单例。

object Config {
    val version = "1.0"
    fun show() = println("Config v$version")
}
Config.show()

伴生对象(companion object)用于在类内部定义静态成员。

class MyClass {
    companion object {
        const val CONSTANT = 100
        fun factory() = MyClass()
    }
}
val obj = MyClass.factory()

集合与函数式编程

Kotlin 提供不可变(默认)和可变集合。

创建集合

val list = listOf(1, 2, 3)          // 只读 List
val mutableList = mutableListOf(1, 2, 3) // 可修改
val set = setOf("a", "b", "c")      // 只读 Set
val map = mapOf("key1" to 1, "key2" to 2) // 只读 Map

Lambda 表达式

Lambda 是匿名函数,放在花括号内,参数声明在 -> 前面,函数体在后。

val sum = { x: Int, y: Int -> x + y }
println(sum(3, 5))  // 8

高阶函数与集合操作

集合提供大量高阶函数(接收函数作参数或返回值),如 filtermapreduce 等。

val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }        // [2, 4, 6, 8, 10]
val even = numbers.filter { it % 2 == 0 }   // [2, 4]
val sumOfAll = numbers.reduce { acc, n -> acc + n } // 15

Kotlin 中,如果函数的最后一个参数是 lambda,可以写在圆括号外(尾随 lambda)。

numbers.forEach { println(it) }

扩展函数与属性

无需继承或设计模式,直接为现有类添加新功能。

// 为 String 扩展一个函数
fun String.addExclamation() = this + "!"

println("Hello".addExclamation()) // Hello!

// 扩展属性
val String.lastChar: Char
    get() = this.get(length - 1)

println("Kotlin".lastChar)  // n

其他实用特性

解构声明

将一个对象拆成多个变量。

val (id, name) = User(1, "Alice")
println(id)   // 1
println(name) // Alice

范围表达式

使用 ..downTountilstep 构建范围。

val range = 1..5            // 1,2,3,4,5
val untilRange = 1 until 5  // 1,2,3,4

类型别名

为类型提供替代名称,提升可读性。

typealias NameList = List<String>
fun greetAll(people: NameList) { ... }

延迟初始化

  • lateinit:用于可变属性,在构造后初始化。
  • by lazy:只读属性的惰性初始化。
lateinit var database: Database
fun setup() {
    database = Database()
}

val heavy by lazy { computeHeavyObject() }

总结与下一步

通过本教程,你已经掌握了 Kotlin 语言的基础知识:变量、控制流、函数、空安全、类、集合与函数式编程等核心特性。Kotlin 的简洁性与安全性能够显著提升你的开发体验。

下一步学习建议

  • 深入了解 Kotlin 协程(Coroutines)以掌握异步编程。
  • 学习使用 Kotlin 开发 Android 应用(Jetpack Compose 推荐)。
  • 尝试 Spring Boot + Kotlin 构建后端服务。
  • 阅读官方文档 kotlinlang.org 获取最新特性。

立刻打开你的 IDE,开始用 Kotlin 写一个简单的命令行工具或 Android 应用,让知识在实践中沉淀。