【Kotlin系列01】Kotlin快速入门:环境搭建与Hello World

引言

如果你是一位Android开发者,可能已经听说过Google在2017年宣布Kotlin成为Android官方开发语言的消息。如果你是后端开发者,可能注意到越来越多的团队开始用Kotlin重构Java项目。如果你对多平台开发感兴趣,Kotlin Multiplatform可能已经进入你的视野。

Kotlin正在成为JVM生态系统中最受欢迎的现代语言之一。根据JetBrains 2024年的开发者调查,Kotlin在JVM语言中的采用率已经超过30%,并且还在快速增长。

那么,为什么要学习Kotlin? 让我先分享一个真实的故事:

我的一位朋友在某互联网公司负责Android团队。2019年团队决定将核心模块从Java迁移到Kotlin。仅仅三个月后,他们发现:

  • 代码量减少了约40% - 同样的功能,Kotlin代码更简洁
  • NullPointerException减少了80% - Kotlin的空安全机制从根源上杜绝了空指针
  • 开发效率提升明显 - 协程、扩展函数等特性让异步编程变得简单
  • 团队满意度提高 - 开发者们普遍表示"再也不想回到Java了"

这不是个例。从Netflix到Uber,从Slack到Pinterest,越来越多的大公司选择Kotlin作为主力开发语言。

本系列文章的目标:带你从零开始系统学习Kotlin,不仅掌握语法,更要理解设计哲学和最佳实践。无论你是完全的新手,还是有Java背景的开发者,都能在这里找到适合自己的学习路径。

今天这篇文章,我们将:

  • 了解Kotlin的历史和核心特性
  • 对比Kotlin和Java,理解为什么要选择Kotlin
  • 搭建Kotlin开发环境
  • 编写第一个Kotlin程序
  • 学习使用REPL快速验证代码
  • 掌握Kotlin基本语法概念

让我们开始这段激动人心的旅程吧!

认识Kotlin

Kotlin的诞生与发展

图片说明:Kotlin从2011年发布到今天的发展历程

Kotlin的名字来源于俄罗斯圣彼得堡附近的Kotlin岛(Котлин),这个名字由JetBrains公司(IntelliJ IDEA的开发商)选定。让我们看看Kotlin的重要里程碑:

  • 2011年7月 - JetBrains公开宣布Kotlin项目
  • 2012年2月 - 开源,采用Apache 2许可证
  • 2016年2月 - Kotlin 1.0正式发布,标志着生产可用
  • 2017年5月 - Google宣布Kotlin成为Android官方开发语言
  • 2019年5月 - Google宣布Kotlin成为Android开发首选语言(Kotlin-First)
  • 2021年5月 - Kotlin 1.5发布,JVM目标字节码升级到Java 8
  • 2024年11月 - Kotlin 2.0发布,带来K2编译器和重大性能提升

从这个发展历程可以看出,Kotlin已经从一个"小众语言"成长为主流的现代编程语言

为什么选择Kotlin?

与其听我长篇大论,不如直接看代码对比。假设我们要实现一个简单的功能:创建一个Person类,包含姓名和年龄,并能打印个人信息。

Java实现:

java 复制代码
public class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void printInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Kotlin实现:

kotlin 复制代码
data class Person(val name: String, val age: Int) {
    fun printInfo() {
        println("Name: $name, Age: $age")
    }
}

看到区别了吗?同样的功能,Java需要30多行代码,Kotlin只需要5行! 而且Kotlin的data class自动生成了:

  • 构造函数
  • getter方法
  • equals()hashCode()方法
  • toString()方法
  • copy()方法(用于复制对象)

这就是Kotlin的魅力:Less is More(少即是多)

Kotlin的核心特性

让我用一张图来展示Kotlin的核心特性:

图片说明:Kotlin的八大核心特性

1. 简洁性(Conciseness)

大幅减少样板代码(Boilerplate Code),让开发者专注于业务逻辑而非重复性代码。

2. 空安全(Null Safety)

从语言层面区分可空类型和非空类型,编译期就能捕获绝大多数空指针错误。

kotlin 复制代码
var name: String = "Kotlin"  // 不可为空
name = null  // 编译错误!

var nullableName: String? = "Kotlin"  // 可空类型
nullableName = null  // 正确

3. 互操作性(Interoperability)

与Java 100%互操作,可以直接调用Java库,混合编译,平滑迁移。

4. 工具友好(Tool-Friendly)

由IntelliJ IDEA背后的公司开发,工具支持一流,智能提示、重构等功能体验极佳。

5. 现代化语言特性

  • 函数式编程支持(高阶函数、Lambda表达式)
  • 协程(Coroutines)用于优雅处理异步操作
  • 扩展函数(Extension Functions)无需继承即可扩展类功能
  • DSL构建能力

6. 多平台支持

  • JVM平台 - Android和服务端开发
  • JavaScript平台 - 前端开发
  • Native平台 - iOS、Desktop、嵌入式系统
  • Kotlin Multiplatform - 跨平台代码共享

7. 表达力强

  • 操作符重载
  • 中缀函数
  • 字符串模板
  • when表达式

8. 安全性

  • 类型安全
  • 编译时检查
  • 不可变性优先

Kotlin vs Java - 深度对比

作为一位在Java和Kotlin都有多年经验的开发者,我整理了一个详细对比表:

特性 Java Kotlin 说明
空安全 运行时检查,易NPE 编译时检查 Kotlin减少80%空指针错误
代码简洁度 冗长 简洁 平均减少40%代码量
函数式编程 Java 8+支持Lambda 原生支持,更强大 Kotlin的高阶函数更灵活
协程 需要第三方库 原生支持 Kotlin协程轻量级高效
扩展函数 不支持 支持 无需继承即可扩展类
智能类型转换 需手动转换 自动转换 is检查后自动转型
数据类 需大量样板代码 一行搞定 data class自动生成
默认参数 不支持 支持 减少方法重载
字符串模板 字符串拼接繁琐 原生支持 "Hello $name"
when表达式 switch语句受限 功能强大 支持任意表达式

Kotlin的应用场景

现在让我们看看Kotlin在实际项目中的应用场景:

Android开发(最广泛)

  • 官方首选语言 - Google推荐Kotlin作为Android开发首选
  • Jetpack Compose - 新一代UI框架完全基于Kotlin
  • 协程 + LiveData/Flow - 优雅处理异步和响应式编程

服务端开发

  • Spring Boot - 完美支持Kotlin
  • Ktor - JetBrains开发的Kotlin原生Web框架
  • Vert.x - 响应式框架Kotlin支持

多平台开发(Kotlin Multiplatform)

  • 在Android、iOS、Web之间共享业务逻辑代码
  • 降低维护成本,提高代码复用率

脚本和工具开发

  • Gradle构建脚本(Kotlin DSL)
  • 数据科学和脚本任务

搭建Kotlin开发环境

好了,理论介绍够了,让我们动手搭建开发环境!我会提供详细的步骤,确保你能顺利完成。

环境需求

图片说明:Kotlin开发环境的组成部分

在开始之前,我们需要准备:

  1. JDK(Java Development Kit) - Kotlin运行在JVM上,需要JDK
  2. IntelliJ IDEA - 最佳的Kotlin开发工具
  3. Kotlin插件 - IntelliJ IDEA Community版内置Kotlin支持

步骤1:安装JDK

Kotlin可以运行在Java 8及以上版本,推荐使用Java 11或Java 17(LTS版本)。

Windows系统

  1. 下载JDK

  2. 安装JDK

    • 双击MSI文件,按提示安装
    • 建议安装路径:C:\Program Files\Java\jdk-17
  3. 配置环境变量

    bash 复制代码
    # 打开"系统环境变量"设置
    # 新建系统变量 JAVA_HOME
    JAVA_HOME=C:\Program Files\Java\jdk-17
    
    # 编辑Path变量,添加
    %JAVA_HOME%\bin
  4. 验证安装

    bash 复制代码
    # 打开命令提示符,执行
    java -version
    # 应该显示: openjdk version "17.0.x"

macOS系统

bash 复制代码
# 使用Homebrew安装(推荐)
brew install openjdk@17

# 创建符号链接
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk \
    /Library/Java/JavaVirtualMachines/openjdk-17.jdk

# 添加到PATH(添加到 ~/.zshrc 或 ~/.bash_profile)
export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"

# 验证安装
java -version

Linux系统(Ubuntu/Debian)

bash 复制代码
# 更新包列表
sudo apt update

# 安装OpenJDK 17
sudo apt install openjdk-17-jdk

# 验证安装
java -version

**推荐**: 如果你需要管理多个JDK版本,可以使用: - Windows: [Jabba](https://github.com/shyiko/jabba) 或 [SDKMAN!](https://sdkman.io/) - macOS/Linux: [SDKMAN!](https://sdkman.io/) 或 [jEnv](https://www.jenv.be/)

步骤2:安装IntelliJ IDEA

IntelliJ IDEA是由JetBrains开发的IDE,对Kotlin支持最好。有两个版本:

  • Community Edition(免费) - 对于学习Kotlin已经足够
  • Ultimate Edition(收费) - 提供更多企业级功能

我们使用免费的Community版本即可。

下载与安装

  1. 访问官网

  2. 安装IDEA

    • Windows: 运行.exe安装包,按提示安装
    • macOS: 打开.dmg文件,拖拽IDEA到Applications
    • Linux: 解压.tar.gz,运行bin/idea.sh
  3. 首次启动配置

    • 选择UI主题(Darcula深色主题或Light浅色主题)
    • 选择键盘映射(默认或类似IDE)
    • 重要: 确认Kotlin插件已安装(Community版自带)

**学生福利**: 如果你是学生,可以申请免费的Ultimate版本教育许可。访问 [JetBrains学生计划](https://www.jetbrains.com/student/) 了解详情。

步骤3:创建第一个Kotlin项目

现在让我们在IntelliJ IDEA中创建第一个Kotlin项目!

  1. 启动IDEA ,点击New Project

  2. 配置项目

    • Name: HelloKotlin
    • Location: 选择你的项目目录
    • Language: Kotlin
    • Build System: IntelliJ(对于学习最简单)
    • JDK: 选择刚才安装的JDK 17
    • Add sample code: 勾选(会自动创建Main.kt)
  3. 点击Create,等待项目创建完成

项目结构解析

创建完成后,你会看到这样的项目结构:

csharp 复制代码
HelloKotlin/
├── .idea/                 # IDEA配置文件目录
├── src/                   # 源代码目录
│   └── main/
│       └── kotlin/
│           └── Main.kt    # 主程序文件
├── out/                   # 编译输出目录
└── HelloKotlin.iml       # 模块配置文件

目录说明:

  • src/main/kotlin/ - 存放Kotlin源代码
  • out/ - 编译后的字节码文件(.class)
  • .idea/ - IntelliJ IDEA的项目配置

第一个Kotlin程序:Hello World

让我们看看IDEA自动创建的Main.kt文件:

kotlin 复制代码
fun main() {
    println("Hello World!")
}

就这么简单!仅仅3行代码,我们就完成了第一个Kotlin程序。让我们逐行解析:

代码解析

kotlin 复制代码
fun main() {                // 1. 声明main函数
    println("Hello World!") // 2. 打印文本
}                           // 3. 函数结束

详细说明:

  1. fun main() - 程序入口点

    • fun 是Kotlin的关键字,用于声明函数(function)
    • main 是特殊的函数名,程序从这里开始执行
    • () 表示这个函数不接受参数
    • 没有指定返回类型,表示返回Unit(相当于Java的void)
  2. println("Hello World!") - 打印输出

    • println是Kotlin标准库提供的函数
    • 功能:打印文本并换行
    • "Hello World!"是字符串字面量
  3. 注意没有分号!

    • Kotlin中分号是可选的
    • 虽然加了也不报错,但约定俗成不加

运行程序

有三种方式运行程序:

方式1:点击行号旁的绿色箭头

  • fun main()这一行,会出现绿色的▶️图标
  • 点击图标,选择Run 'MainKt'

方式2:使用菜单

  • 点击顶部菜单 RunRun 'MainKt'

方式3:使用快捷键

  • Windows/Linux: Ctrl + Shift + F10
  • macOS: Ctrl + Shift + R

运行后,你会在底部的Run窗口看到输出:

vbnet 复制代码
Hello World!

Process finished with exit code 0

恭喜你!你已经成功运行了第一个Kotlin程序! 🎉

让我们稍微改进一下

现在让我们让程序更有趣一点:

kotlin 复制代码
fun main() {
    val name = "Kotlin"
    val version = "2.0"
    println("Hello $name $version!")
    println("欢迎来到Kotlin的世界!")
}

新概念:

  • val - 声明一个只读变量(类似Java的final)
  • $name - 字符串模板,直接在字符串中插入变量值

运行输出:

复制代码
Hello Kotlin 2.0!
欢迎来到Kotlin的世界!

看到了吗?字符串模板让代码更简洁,不需要Java那样繁琐的+拼接。

使用Kotlin REPL

REPL(Read-Eval-Print Loop,读取-求值-输出循环)是一个交互式编程环境,非常适合快速验证代码片段和学习新语法。

启动REPL

在IntelliJ IDEA中:

  1. 点击顶部菜单 ToolsKotlinKotlin REPL
  2. 底部会出现Kotlin REPL窗口

你也可以使用命令行REPL(需要先安装Kotlin compiler):

bash 复制代码
# macOS/Linux用户可以用SDKMAN安装
sdk install kotlin

# 启动REPL
kotlinc-jvm

REPL基本使用

让我们在REPL中尝试一些代码:

kotlin 复制代码
// 输入表达式,按Ctrl+Enter执行
>>> 2 + 3
5

>>> "Hello" + " " + "REPL"
Hello REPL

>>> val x = 10
>>> val y = 20
>>> x + y
30

>>> fun greet(name: String) = "Hello, $name!"
>>> greet("Kotlin")
Hello, Kotlin!

>>> (1..10).filter { it % 2 == 0 }
[2, 4, 6, 8, 10]

REPL的优势:

  • ✅ 立即看到结果,无需编译
  • ✅ 快速验证语法和API
  • ✅ 学习新特性的最佳工具
  • ✅ 调试代码片段

**学习建议**: 在学习Kotlin的过程中,遇到不确定的语法,先在REPL中试一试,比查文档更快!

REPL实战:快速计算器

让我们用REPL实现一个简单的计算器:

kotlin 复制代码
>>> fun calculate(a: Int, b: Int, op: Char): Int {
        return when (op) {
            '+' -> a + b
            '-' -> a - b
            '*' -> a * b
            '/' -> a / b
            else -> 0
        }
    }

>>> calculate(10, 5, '+')
15

>>> calculate(10, 5, '*')
50

Kotlin基本语法概览

在结束本文之前,让我们快速浏览一下Kotlin的基本语法,为后续学习打下基础。

包声明和导入

kotlin 复制代码
package com.example.myapp  // 声明包名

import kotlin.math.*       // 导入kotlin.math包的所有内容
import java.util.Date      // 导入Java类

fun main() {
    println(sqrt(16.0))  // 使用导入的函数
    println(Date())      // 使用导入的Java类
}

说明:

  • 包名通常与文件路径对应,但不强制
  • 可以使用import导入Kotlin和Java的类和函数
  • *表示导入包中的所有内容

语句 vs 表达式

这是Kotlin的一个重要概念:几乎一切都是表达式

kotlin 复制代码
// Java中if是语句(statement)
String result;
if (x > 0) {
    result = "positive";
} else {
    result = "negative";
}

// Kotlin中if是表达式(expression),有返回值
val result = if (x > 0) "positive" else "negative"

表达式与语句的区别:

  • 语句(Statement): 执行操作,无返回值
  • 表达式(Expression): 执行操作,有返回值

Kotlin中,ifwhentry都是表达式,可以直接赋值给变量。

分号可选

kotlin 复制代码
// 不需要分号
val x = 10
val y = 20
println(x + y)

// 加分号也可以,但不推荐
val a = 10;
val b = 20;

注释

kotlin 复制代码
// 这是单行注释

/*
 这是
 多行注释
 */

/**
 * 这是文档注释(KDoc)
 * @param name 参数说明
 * @return 返回值说明
 */
fun greet(name: String): String {
    return "Hello, $name!"
}

代码风格约定

Kotlin有一套官方的代码风格指南,主要约定:

  • 命名风格:

    • 类名:PascalCase (大驼峰) - PersonInfo
    • 函数名/变量名:camelCase (小驼峰) - userName
    • 常量:SCREAMING_SNAKE_CASE - MAX_COUNT
  • 缩进: 使用4个空格,不使用Tab

  • 花括号: 开花括号不换行(K&R风格)

    kotlin 复制代码
    fun example() {  // 开花括号紧跟函数声明
        // 代码
    }
  • 空格使用:

    • 操作符两侧加空格:a + b
    • 逗号后加空格:fun foo(a: Int, b: Int)
    • 冒号前不加,后加:val name: String

Kotlin Playground:在线体验

如果你暂时不想安装环境,可以使用Kotlin Playground:

图片说明:Kotlin Playground在线编程环境

特点:

  • 无需安装,浏览器直接运行
  • 支持切换Kotlin版本和运行平台(JVM/JS/Native)
  • 可以分享代码链接
  • 内置大量示例

访问方式:

  1. 打开 play.kotlinlang.org/
  2. 在编辑器中输入代码
  3. 点击Run按钮
  4. 在右侧查看输出结果

这对于快速分享代码和在线演示非常有用。

常见问题解答

Q1: Kotlin和Java可以混合使用吗?

答: 完全可以!Kotlin与Java 100%互操作。你可以:

  • 在Kotlin项目中调用Java代码
  • 在Java项目中调用Kotlin代码
  • 同一项目中既有.kt文件又有.java文件

实际项目中,很多团队都是渐进式迁移,先写新功能用Kotlin,老代码保持Java,两者和平共处。

Q2: 学习Kotlin需要先学Java吗?

答: 不需要。Kotlin语法更现代、更简洁,直接学习Kotlin反而更容易。但是:

  • 如果你已经会Java,学Kotlin会非常快(1-2周即可上手)
  • 如果你完全没有编程经验,建议先学习编程基础概念
  • 如果你会其他语言(如Python/JavaScript),学Kotlin很轻松

Q3: IntelliJ IDEA和Android Studio有什么区别?

答:

  • Android Studio基于IntelliJ IDEA,专为Android开发定制
  • IntelliJ IDEA是通用IDE,支持多种语言和框架

如果你是Android开发者,使用Android Studio;如果是后端或多平台开发,使用IntelliJ IDEA。两者的Kotlin支持几乎一致。

Q4: Kotlin的性能如何?

答:

  • Kotlin编译成JVM字节码,运行时性能与Java相同
  • 某些特性(如inline函数)甚至可以优化性能
  • 协程比Java线程更轻量级,性能更好
  • 唯一需要注意的是编译速度,Kotlin编译比Java稍慢,但Kotlin 2.0的K2编译器已大幅改进

Q5: 学习Kotlin需要多长时间?

答: 取决于你的背景:

  • 有Java经验: 1-2周掌握基础,1-2个月熟练
  • 有其他语言经验: 2-4周掌握基础,2-3个月熟练
  • 零基础: 1-2个月掌握基础,3-6个月熟练

本系列文章会带你系统学习,跟着练习,进步会很快!

总结

恭喜你完成了Kotlin学习的第一步!让我们回顾一下今天学到的内容:

核心要点

  1. Kotlin是什么:

    • JetBrains开发的现代化JVM语言
    • Android官方首选语言
    • 简洁、安全、富有表现力
    • 与Java 100%互操作
  2. 为什么选择Kotlin:

    • 代码量减少40%
    • 编译期空安全,减少80%空指针错误
    • 现代化语言特性(协程、扩展函数、DSL等)
    • 多平台支持
  3. 开发环境:

    • JDK 17+ (推荐)
    • IntelliJ IDEA Community Edition
    • Kotlin插件(IDEA自带)
  4. Hello World程序:

    kotlin 复制代码
    fun main() {
        println("Hello World!")
    }
  5. REPL工具:

    • 快速验证代码的交互式环境
    • 学习新语法的最佳工具
  6. 基本语法:

    • 分号可选
    • 几乎一切都是表达式
    • 字符串模板 "Hello $name"
    • 简洁的函数声明

下一步学习计划

现在你已经搭建好环境并运行了第一个程序,接下来我们将深入学习:

  • val vs var 的区别
  • Kotlin的基本数据类型
  • 字符串操作和模板
  • 数组和集合
  • 空安全机制详解

练习建议:

  • 在IntelliJ IDEA中创建一个新项目
  • 修改Hello World程序,输出你的姓名和学习Kotlin的目标
  • 在REPL中尝试本文的所有代码示例
  • 探索Kotlin Playground的在线示例

**学习小贴士**: 学习编程最重要的是**多练习**。不要只是看代码,一定要亲手敲一遍,运行一遍,甚至故意改错看看会发生什么。只有通过实践,才能真正理解和记住知识!

相关资源

官方资源

社区资源

学习路径


系列文章导航:

  • 👉 下一篇: [变量、数据类型与基本操作]--马上就来

如果这篇文章对你有帮助,欢迎点赞、收藏、分享!有任何问题或建议,欢迎在评论区留言讨论。让我们一起学习,一起成长!

也欢迎访问我的个人主页发现更多宝藏资源

相关推荐
阿巴斯甜20 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker21 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android