本文基于《第一行代码 Android(第 3 版)》第 2 章核心内容,为 Android 开发者打造一份清晰、可落地的 Kotlin 入门教程,帮你从 Java 平滑过渡,掌握现代 Android 开发语言。


一、Kotlin 语言简介:为什么要学 Kotlin?

Kotlin 是由 JetBrains 开发的静态类型编程语言,2017 年被 Google 宣布为 Android 官方开发语言,如今已成为 Android 开发的首选语言。

1. 核心优势

  • 100% 与 Java 互操作:可直接调用 Java 代码,也可被 Java 调用,无缝兼容现有项目。
  • 语法简洁:大幅减少样板代码(如无需手动写 findViewByIdgetter/setter),代码量比 Java 少约 40%。
  • 空安全设计:从语法层面避免空指针异常(NPE),这是 Android 应用崩溃的首要原因。
  • 函数式编程支持:原生支持 Lambda、高阶函数,让代码更简洁、更易读。
  • 多平台能力:可编译为 JVM 字节码、JavaScript、原生机器码,实现跨平台开发。

2. 与 Java 的核心区别

特性 Java Kotlin
空安全 需手动判空,易 NPE 类型系统区分可空 / 非空,编译期检查
语法 verbose,样板代码多 简洁,支持类型推导
函数式 需借助 Java 8+ Stream 原生支持 Lambda、高阶函数
类与继承 类默认 final,需手动 open 类默认可继承,支持数据类、密封类

二、如何运行 Kotlin 代码

Kotlin 代码有多种运行方式,适合不同学习阶段:

1. Kotlin Playground(在线运行)

  • 访问 Kotlin 官方 Playground,无需安装环境,直接在线编写、运行 Kotlin 代码。
  • 适合快速验证语法、测试小片段,是入门阶段的最佳选择。

2. IntelliJ IDEA / Android Studio

  • 创建 Kotlin 项目:在 IDE 中选择「New Project → Kotlin」,即可创建纯 Kotlin 项目。
  • 运行单个文件:创建 .kt 文件,编写 main 函数,点击左侧运行按钮即可执行。
  • Android 项目:在 Android Studio 中创建 Android 项目时直接选择 Kotlin 语言,代码会编译为 APK 运行在设备上。

3. 命令行运行

  • 安装 Kotlin 编译器后,可通过 kotlinc 命令编译 .kt 文件为 .class,再用 kotlin 命令运行。
  • 适合了解底层编译流程,日常开发不推荐。

三、编程之本:变量和函数

1. 变量声明

Kotlin 用 val 和 var 声明变量,无需显式指定类型(自动类型推导):

// val:不可变变量(类似 Java final),只能赋值一次
val name: String = "Kotlin"
val age = 3  // 自动推导为 Int 类型

// var:可变变量,可多次赋值
var count = 0
count = 10

2. 函数声明

用 fun 关键字声明函数,语法更简洁:

// 无返回值函数(Unit 可省略)
fun sayHello(): Unit {
    println("Hello Kotlin!")
}

// 有返回值函数
fun add(a: Int, b: Int): Int {
    return a + b
}

// 单表达式函数(可简化为一行)
fun multiply(a: Int, b: Int) = a * b

3. 函数参数默认值与具名参数

// 默认参数
fun printMessage(message: String, prefix: String = "Info: ") {
    println("$prefix$message")
}

// 调用时可省略默认参数
printMessage("Hello") // 输出:Info: Hello
printMessage("Warning", "Warn: ") // 输出:Warn: Warning

// 具名参数(解决参数顺序问题)
printMessage(prefix = "Debug: ", message = "Test")

四、程序的逻辑控制

1. 条件判断:if 表达式

Kotlin 中 if 是表达式,可直接返回值,替代 Java 中的三元运算符:

val max = if (a > b) a else b

2. 多条件判断:when 表达式

替代 Java 中的 switch-case,功能更强大:

fun describe(obj: Any): String = when (obj) {
    1 -> "One"
    "Hello" -> "Greeting"
    is Long -> "Long number"
    !is String -> "Not a string"
    else -> "Unknown"
}

3. 循环:forwhile

  • for 循环:支持遍历区间、集合,语法更简洁:
    // 遍历 1 到 10(包含两端)
    for (i in 1..10) {
        println(i)
    }
    
    // 遍历 1 到 9(不包含 10)
    for (i in 1 until 10) {
        println(i)
    }
    
    // 遍历集合
    val list = listOf("A", "B", "C")
    for (item in list) {
        println(item)
    }
    
  • while / do-while:与 Java 用法一致。

五、面向对象编程

1. 类与对象

// 定义类
class Person(val name: String, var age: Int) {
    fun sayHi() {
        println("Hi, I'm $name, $age years old.")
    }
}

// 创建对象(无需 new 关键字)
val person = Person("Tom", 20)
person.sayHi()

2. 继承与多态

  • Kotlin 类默认 final,需用 open 关键字修饰才能被继承:
    open class Animal {
        open fun makeSound() {
            println("Animal makes sound")
        }
    }
    
    class Dog : Animal() {
        override fun makeSound() {
            println("Woof!")
        }
    }
    

3. 数据类与单例类

  • 数据类:自动生成 equals()hashCode()toString() 等方法,适合存储数据:
    data class User(val id: Int, val name: String)
    
  • 单例类:用 object 关键字实现单例模式:
    object Singleton {
        fun doSomething() {
            println("Singleton instance")
        }
    }
    

六、Lambda 编程

Lambda 是 Kotlin 函数式编程的核心,让代码更简洁:

1. 基本语法

// 完整 Lambda 语法
val sum: (Int, Int) -> Int = { a: Int, b: Int -> a + b }

// 简化版(类型推导)
val sum = { a: Int, b: Int -> a + b }

// 调用 Lambda
val result = sum(1, 2) // 结果为 3

2. 集合操作

Lambda 在集合操作中威力巨大,替代 Java 繁琐的循环:

val list = listOf(1, 2, 3, 4, 5)

// 过滤偶数
val evenList = list.filter { it % 2 == 0 }

// 映射为平方
val squareList = list.map { it * it }

// 求和
val total = list.reduce { acc, i -> acc + i }

七、空指针检查:Kotlin 的核心安全特性

Kotlin 从语法层面杜绝空指针异常(NPE):

1. 可空类型与非空类型

  • 非空类型:StringInt,不能赋值为 null
  • 可空类型:String?Int?,可以赋值为 null
var name: String = "Tom"
name = null // 编译错误

var nullableName: String? = "Tom"
nullableName = null // 编译通过

2. 安全调用与 Elvis 操作符

// 安全调用:?. ,对象为空时返回 null
val length = nullableName?.length

// Elvis 操作符:?: ,为空时返回默认值
val length = nullableName?.length ?: 0

3. 非空断言

// !! :断言对象非空,为空时抛出 NPE(谨慎使用)
val length = nullableName!!.length

八、Kotlin 中的小魔术

1. 字符串模板

在字符串中直接嵌入变量 / 表达式,无需拼接:

val name = "Tom"
println("Hello, $name!") // 输出:Hello, Tom!
println("1 + 2 = ${1 + 2}") // 输出:1 + 2 = 3

2. 区间与范围

// 闭区间:1..10
// 半开区间:1 until 10
// 倒序区间:10 downTo 1
// 步长:1..10 step 2

3. 解构声明

将对象 / 集合解构为多个变量:

val (id, name) = User(1, "Tom")
println("id: $id, name: $name")

九、本章总结:Kotlin 入门核心要点

第 2 章是 Kotlin 语言的基础篇,核心目标是:

  1. 理解 Kotlin 的优势与定位,建立学习动力。
  2. 掌握 Kotlin 代码的运行方式,打通开发环境。
  3. 学习变量、函数、逻辑控制等基础语法,完成从 Java 到 Kotlin 的过渡。
  4. 理解面向对象、Lambda、空安全等核心特性,为 Android 开发打下基础。

Kotlin 语法简洁、安全、强大,是现代 Android 开发的必备技能。掌握本章内容后,你就可以顺利进入后续 Android 组件与 UI 开发的学习。


下一步学习建议

  1. 语法练习:在 Kotlin Playground 中练习变量、函数、Lambda 等语法,熟悉 Kotlin 写法。
  2. 空安全练习:尝试编写可空类型代码,体会 ?.?: 等操作符的作用。
  3. 集合操作:用 Lambda 实现集合的过滤、映射、求和等操作,感受函数式编程的便捷。
  4. Android 结合:在 Android 项目中用 Kotlin 编写 Activity,体验 findViewById 替代方案(如 View Binding)。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐