
如果你最近在翻技术社区或者打开招聘软件看移动端岗位的要求大概率会反复撞见同一个词Kotlin。这三年我自己的感受特别明显以前项目里 Java 还能稳坐半边天现在新开的安卓工程几乎默认就是 Kotlin甚至不少后端服务端也把 Kotlin 列为可选语言。作为一个写了好几年 Java、又转向 Kotlin 的老程序员我特别清楚新手卡在第一步的那种感觉环境还没搭利索热情就先凉了一半。这篇是【Kotlin系列】的第一篇核心就两件事——把环境搭建彻底讲透用最短路径跑通 Hello World。这篇文章不是给你抄一个命令就完事而是把“为什么要这么搭”“选哪个版本”“踩到坑怎么排”全部拆开。适合三类人刚开始学 Kotlin 的学生、打算从 Java 转 Kotlin 的工程开发、以及想要快速在安卓或服务端落地 Kotlin 的团队新成员。我会尽量用大白话把那些文档里写了但没人解释的细节补齐你照着操作一遍基本不会再被环境问题拦住。1. 先搞明白我们学的到底是一门什么语言1.1 为什么选 Kotlin 而不是继续 JavaKotlin 是由 JetBrains 公司开发的静态类型编程语言2011 年首次亮相2016 年发布 1.0 正式版2017 年 Google 宣布安卓开发的一等支持语言名单里有它之后热度一路走高。它不是替代 Java 的“革命者”而是站在 Java 肩膀上做了大量现代化改进的“继承者”代码更简洁、空指针安全是编译期设计的一部分、函数式编程特性一等公民化同时又和 Java 有近乎无缝的互操作性。很多人问我“我 Java 还没学明白直接学 Kotlin 能行吗”我的答案是能但有个前提你至少要理解类、对象、方法、变量的基本概念。Kotlin 语言的曲线比 Java 平滑很多它把那些啰嗦的样板代码砍掉了一大半比如 getter/setter、构造函数重载、数据类写起来非常省事。但如果你连 JVM 是什么都不清楚可能会在环境阶段就被“JDK、Gradle、SDK”这些词绕晕。所以这篇文章也会顺带把环境背后涉及的 JVM 概念讲清楚。1.2 学 Kotlin 需要哪些知识储备严格来说跑通 Kotlin 的 Hello World 只需要三个东西一台电脑、一个 JDK、一个能写代码的工具。可选的工具包括 IntelliJ IDEA、Android Studio、VS Code、甚至纯命令行。对于初学者我强烈建议使用 IntelliJ IDEA Community 版原因后面会讲。你不需要提前装好安卓 SDK也不需要会 Gradle。这两样只在开发安卓或复杂后端项目时才需要。第一篇我们聚焦在最简单的 JVM 命令行应用上把“编译 Kotlin 代码 → 生成字节码 → 在 JVM 上运行”这个最核心的链路跑通。这条链路一旦通了后面的安卓开发、后端开发、协程、Compose都只是在此之上叠加模块而已。2. 环境搭建从 JDK 到 IDE 的一次性配置2.1 JDK 版本选择用 17 还是 21Kotlin 编译器和运行时依赖 Java Development KitJDK提供的 Java 虚拟机、标准库和编译工具链。所以第一步永远是装 JDK。Kotlin 官方对 JDK 版本的支持范围很广从 Java 8 到 Java 21 都能编译运行但我个人的推荐是新学者直接选 JDK 17 或 JDK 21。为什么要选这两个版本因为 JDK 17 是 Java 长期支持版本绝大多数公司生产环境已经迁移到这个版本以上生态兼容性最好。JDK 21 是更新的长期支持版本提供了分代 ZGC 等新特性如果你想站在未来视角学习选它也没问题。我自己开发的时候用的是 JDK 17主要原因是很多老项目用的 Gradle 版本、Spring Boot 版本还没完全适配到 JDK 21没必要在这种地方给自己添堵。下载 JDK 的时候建议选 Eclipse Temurin 或 Microsoft Build of OpenJDK。这两个发行版都是开源免费、社区活跃、更新及时的 OpenJDK 构建产物。国内用户如果不方便访问境外站点可以从国内镜像站下载 Temurin或者直接用阿里云、腾讯云的厂商授权发行版。说实话JDK 本身不区分“学习版”和“生产版”你下载任何一个主流的 OpenJDK 发行版都可以。2.2 安装 JDK 并配置环境变量安装方式分两步先把 JDK 解压或通过安装包装好再配置三个环境变量JAVA_HOME、PATH、CLASSPATH可选。我以 Windows 和 macOS 各说一遍因为你很可能在这两个系统之间二选一。Windows 用户下载 .msi 或 .zip 包。如果是 .msi双击安装一路下一步即可。注意安装路径不要带空格和中文比如C:\Program Files\Eclipse Adoptium\这种路径虽然能用但我见过不少环境下因为空格导致脚本出问题的例子建议直接装到D:\jdk-17或C:\jdk-17。装完以后右键“此电脑”→“属性”→“高级系统设置”→“环境变量”新建一个系统变量变量名JAVA_HOME变量值填你的 JDK 安装目录比如C:\jdk-17。然后在Path变量里追加一行%JAVA_HOME%\bin。这里的关键点是追加不是替换很多新手把原来的 Path 清空导致系统一堆命令失效。macOS 用户就简单了我建议直接用 Homebrew 安装brew install openjdk17然后配置环境变量。在终端里执行echo export JAVA_HOME/opt/homebrew/opt/openjdk17 ~/.zshrc再执行echo export PATH$JAVA_HOME/bin:$PATH ~/.zshrc最后source ~/.zshrc。如果你用的是bash就把.zshrc改成.bash_profile。验证是否成功的方法相同新开一个终端窗口执行java -version javac -version能看到openjdk version 17.0.x后就说明 JDK 装好了。2.3 IntelliJ IDEA 安装与 Kotlin 插件JDK 是编译器环境和运行环境IDE 则是你写代码的“编辑器 编译器 调试器”综合体。对 Kotlin 来说IntelliJ IDEA 是最顺手的工具因为它本身就是 JetBrains 出的Kotlin 的插入、补全、重构、调试体验都是天花板级别。IDEA 分两个版本Ultimate付费和 Community免费。学习 Kotlin 基础语法Community 版绰绰有余完全不需要付费。下载 Community 版安装时保持默认配置即可。Windows 下建议勾选“创建桌面快捷方式”和“Open Folder as Project”。macOS 下把应用拖入 Applications 文件夹。启动 IDEA 以后首次需要激活插件。如果你下载的是 2022.3 以上的新版本IDEA 默认自带 Kotlin 插件无需单独安装。如果是老版本需要在插件市场搜索 Kotlin安装后重启。这一步其实很容易出问题因为插件下载源在国外网络慢时可能一直转圈。你在插件市场搜索的时候如果半天没反应可以考虑去 JetBrains 插件官网下载对应 IDE 版本的 Kotlin 插件 zip 包然后选择“Install Plugin from Disk”安装。这也是我实际帮同学排查时用得最多的解法。2.4 命令行工具掌握 kotlinc 的关键性虽然 IDE 能帮你隐藏很多细节但我想再多说一个“非必须但很有用”的工具Kotlin 命令行编译器kotlinc。它可能在你理解“Kotlin 是怎么变成可执行程序”的路上提供很大帮助。Kotlin 官方提供了命令行工具包你可以从 GitHub Releases 下载Kotlin 编译器压缩包解压以后把bin目录加入 PATH。或者用 SDKMAN 安装sdk install kotlin安装完成后在终端执行kotlinc -version能输出版本号就表示成功。命令行编译器的价值在于它可以绕开 IDE 的复杂配置在最纯净的环境下帮你确认“JDK 正常、编译器正常、代码本身没问题”。初学者用命令行跑一遍再回 IDE 里操作很多报错一眼就能看出原因。沿着命令行这条路继续理解执行过程我推荐一条完整链路。创建hello.kt文件后执行kotlinc hello.kt -include-runtime -d hello.jar java -jar hello.jar-include-runtime参数会把 Kotlin 标准库打包进最终的 jar这样你用java -jar运行时不需要额外引入 Kotlin 依赖。这个细节对有经验的 Java 开发者来说很好理解但对新手可能有点“黑魔法”的味道实际它们不过是一条标准的“编译成字节码再交给 JVM 执行”的路径罢了。3. Hello World用最少步骤跑通第一段代码3.1 新建项目时的关键选择打开 IntelliJ IDEA选择 “New Project”。不同版本的界面有细微差别但关键选项不会变。第一个选项是项目类型我们要选Java或Kotlin不要选安卓、Compose、Web 这类带框架的模板。如果你是英文版界面对应的是 “Java” / “Kotlin” / “JVM”。第二个关键是选择 SDK。IDEA 会检测到你刚才装的 JDK如果没检测到点击下拉框的 “Add SDK”选择 JDK手动指向安装目录。这一步有不少人漏掉结果IDE里新建项目报“No SDK specified”后面无论怎么写代码都运行不了。第三个关键是项目名和后缀。项目名建议用简单的英文比如KotlinDemo不要用中文路径。构建系统保持默认新版IDEA默认用 IntelliJ 自己的构建系统不用 Gradle 也能跑通。等 Demo 阶段完全结束后再引入 Gradle 来管理依赖也不迟。最后一点IDEA 会自动帮你生成一个Main.kt文件里面预置了一个简单的主函数fun main() { println(Hello World!) }如果你不缺这一步新建完项目后直接点编辑器区域左侧的绿色三角形就能运行。控制台会输出Hello World!。3.2 Hello World 代码的几种写法虽然 IDEA 自动生成的代码已经能跑但我想把 Hello World 的几种变体也一并讲清楚这样你以后看别人的项目时不至于迷惑。最基础的写法fun main() { println(Hello, Kotlin!) }这和 Java 的public static void main(String[] args)相比简化了不是一点半点。fun是 Kotlin 声明函数的关键字main是程序入口函数体用花括号包裹。默认情况下main函数可以没有返回值所以不需要写void或者: Unit。如果你需要接收命令行参数可以这么写fun main(args: ArrayString) { println(Hello, Kotlin!) }println是 Kotlin 标准库提供的输出函数等价于 Java 的System.out.println。另外还有一个print区别是它不换行。让我用个生活化的类比你往一张纸上写一排字println会在写完以后自动换到下一行print则一直贴着写下去。再补充一个比较实用的写法——字符串模板。Kotlin 允许你在字符串里用$变量名直接把变量值插进去这个特性非常常用fun main(args: ArrayString) { val name if (args.isNotEmpty()) args[0] else Kotlin println(Hello, $name!) }在终端执行kotlinc hello.kt -include-runtime -d hello.jar java -jar hello.jar 老王输出结果就是Hello, 老王!。这在后续日志打印、用户界面展示里面会频繁使用建议一开始就练熟。3.3 理解 main 函数和 println 的两层原理main函数为什么叫main因为 JVM 启动的时候会去类里面找main方法并调用它作为程序入口。Kotlin 编译器会把顶层函数main编译成一个名为MainKt的类中的静态方法所以你在命令行运行java -jar hello.jar时JVM 才能顺利定位到入口。println为什么能输出因为它最终调用的依然是 Java 的标准输出流System.out。换句话说Kotlin 并没有重新发明一套“输出系统”而是做了个更简洁的封装。如果你在 IDEA 的控制台看到输出那是因为 IDE 捕获了进程的 stdout 流并展示在面板里。理解这两层有助于你日后排查“为什么代码好像运行了但屏幕上没有字”——很可能不是你代码错了而是输出重定向到了别的位置。3.4 用运行配置把项目“跑起来”在 IDEA 中运行 Kotlin 文件最直接的方式是点击fun main()左侧的绿色三角形图标。点击后 IDEA 会默认创建一个运行配置你可以给这个配置命名比如Hello然后点运行。如果编辑器里没有出现三角形有可能是光标没有放在main函数内或者文件没有被识别为 Kotlin 文件。此时可以右键文件 → “Run MainKt”。运行之后下方控制台会出现程序输出也会显示进程退出代码。看到Process finished with exit code 0就代表程序正常结束。如果出现Exception in thread main这样的红字通常说明你代码中抛出了未捕获异常或者环境变量还有问题。以上这些点排错时非常关键。4. 环境搭建与运行阶段的避坑记录4.1 命令行出现“java 不是内部或外部命令”怎么办这是新手在所有语言入门里碰到次数最多的问题。如果你在终端敲java -version提示找不到命令99% 的原因是 PATH 变量没有配好。检查步骤其实很固定第一确认 JDK 安装目录里有没有bin/java.exe或者bin/java文件。如果没有说明安装不完整重新安装。第二检查JAVA_HOME的值是不是指向了 JDK 的根目录。这里有个高频错误有人把JAVA_HOME指到了bin目录导致路径变成了bin/bin。第三检查Path里是否写了%JAVA_HOME%\bin注意大小写无所谓但百分号不能漏。第四改完环境变量后一定要新开一个终端窗口因为旧窗口保存的还是修改前的环境。我自己的经验是Windows 下最容易出问题的就是名称和顺序。我建议把%JAVA_HOME%\bin放在 Path 列表的前面防止系统里残留的其他 JDK 版本抢先执行。4.2 在 IDEA 里找不到 SDK 或插件装不上表现有两种新建项目时 SDK 下拉框是空的或者插件市场一直加载不出来。SDK 为空解决路径是进入File → Project Structure → SDKs点加号添加 JDK选择你安装 JDK 的根目录注意要选到包含bin文件夹的那一级不要选到 bin 里面。另一种做法是安装 JDK 后重启 IDEAIDEA 会在启动时自动检测系统里已有的 JDK。插件市场加载不出来先不要盲目判定是环境坏了通常是网络问题。JetBrains 插件仓库在国内访问不稳定你可以尝试下面几种方案修改 IDEA 的 HTTP 代理设置、用离线插件包安装、更换镜像源。离线插件包安装最省事去 JetBrains 插件官网搜索 Kotlin下载kotlin-xxx.zip然后在 IDEA 里Settings/Plugins → ⚙ → Install Plugin from Disk选择该 zip 文件后重启。离线安装的时候版本匹配很关键下载页一般会提示支持的最小 IDEA 版本认准了再装否则可能出现 IDEA 界面都打不开的严重后果。4.3 运行按钮是灰色的或者点了没反应这种情况往往不是代码问题而是 IDEA 还没找到你的主类。检查点Main.kt是否有fun main()该函数是否位于src目录IDEA 里的Source Root鼠标点击在函数内部后左侧是否有绿色图标出现。如果没有可以右键Main.kt然后选择 Run。如果在右键菜单里没有Run说明 IDEA 还没有把这个文件识别为可执行文件需要先检查文件是否放在src目录内以及项目 SDK 是否配置好。一个更隐蔽的坑是你在构建系统上选择了 Gradle 而不是 IntelliJ但 Gradle 的 JDK 路径没配置正确。Gradle 默认会用项目的 JDK如果JAVA_HOME指向了不存在的位置Gradle 同步就会出错运行按钮会一直转圈。这种情况去Settings → Build, Execution, Deployment → Build Tools → Gradle里把 Gradle JVM 改为你本机的 JDK 17 即可。4.4 常见问题速查表问题现象最可能的原因推荐解法终端java -version报找不到命令PATH 未配置或配错修复JAVA_HOME和 PATH新开终端验证IDEA 新建项目时无 SDKIDE 没检测到 JDK手动添加 JDK 路径或重装JDK后重启Kotlin 插件市场打不开网络原因用离线 zip 安装插件运行按钮灰色未识别 main 函数确认文件在 Source Root 且含fun main()运行时报ClassNotFoundException构建配置不对检查 IDEA/Gradle 的 Project SDK 设置控制台输出中文乱码文件编码或控制台编码不一致将项目 Encoding 设为 UTF-8控制台设置为 UTF-8kotlinc命令找不到命令行工具未加入 PATH添加kotlin/bin到 PATH 并重启终端如果你第一次跑通就遇到乱码问题推荐优先把文件编码改成 UTF-8Settings → Editor → File Encodings把 Global Encoding、Project Encoding、Properties Files 都改为 UTF-8。4.5 一个让我印象很深的“玄学问题”我刚开始带朋友入门时遇到过一种情况项目代码完全一样一台电脑能跑另一台死活报Error: Could not find or load main class MainKt。排查了大半天最后发现是两台电脑的 IDEA 项目构建系统不同一台是 IntelliJ 原生构建另一台是 Gradle 构建。Gradle 构建时IDEA 没有自动刷新依赖导致编译输出目录里根本没有生成MainKt.class文件。解决方法很简单在 Gradle 面板点一下刷新按钮或者执行Tasks → build → clean后重新运行。这个经历让我明白所谓“玄学”问题90% 都和构建工具的状态有关。以后你换电脑开发时遇到类似问题先检查构建工具的同步状态大概率能省下好多时间。5. 入门阶段要避开的几个心态陷阱5.1 不要一上来就追求“安卓开发从零到一”很多人听说 Kotlin 是安卓官方语言就想着干脆直接学安卓跳过命令行 Kotlin。我的态度很明确不推荐。安卓开发涉及 Activity、布局文件、生命周期、Gradle 依赖、模拟器、SDK 版本兼容等一系列额外知识任何一个环节出问题都会让人怀疑人生。而纯 Kotlin 语法学习你只需要一个命令行或一个 IDEA就能把所有核心语法、函数式编程、协程、集合操作练透。等语法基础扎实了再进入安卓或服务端开发你会觉得事半功倍。如果把 Kotlin 比作开车那么基础的语法就是油门、刹车、方向盘安卓框架就是城市路况、红绿灯和停车场。你不可能刚上车就开始挑战早晚高峰的高架桥先找个空旷场地把方向盘握熟再上路才合理。5.2 学会阅读报错信息新手最常见的坏习惯是看到红色报错就慌直接截图发群里问。实际大多数报错已经写得明明白白。比如Unresolved reference: println说明编译器不认识println大概率是文件没被当作 Kotlin 文件识别。再比如Exception in thread main java.lang.NumberFormatException说明你试图把字母转换成数字。每次报错花两分钟读一下把关键词提取出来去搜索框搜索往往比你等别人的回复要快得多。我自己的习惯是读报错从下往上看。Java/Kotlin 的异常堆栈最底部往往是最早出现的异常源头最顶部只是当前调用位置。从下往上找在高亮业务代码行附近通常就是真正的出错点。5.3 把“能跑”当成“学会了”还早着呢Hello World 跑通意味着环境没问题这是万里长征第一步。接下来建议按这个顺序练习变量与类型、条件控制与循环、函数定义与默认参数、数据类与解构、空安全与?、集合操作、协程基础。每换一个主题写一个 20 行以内的小程序在控制台反复跑直到形成肌肉记忆。如果你以后做后端也别落下 Kotlin 的data class和协程如果你以后做安卓val/var的可变性思维、密封类、扩展函数也会是加分项。Kotlin 的语言设计哲学是“让不变性成为默认选项让可空性被显式表达”——现在打好基础将来读第三方框架源码会轻松很多。5.4 遇到问题先查这三类来源再问人我给大家一个排错顺序第一看官方文档的 Kotlin 基础部分这是最权威的第二看社区问答平台上的同款问题注意看采纳答案和回复时间太老的方案可能已不适用第三用英文搜关键词实测英文资料的覆盖面和时效比中文资料快很多。问别人永远排到最后因为你可能连问题本身都没描述清楚。这套方法论其实不只适用于 Kotlin任何新语言、新框架的学习都是同一个套路。环境搭建问题十有八九是版本、路径、网络造成的很少是代码逻辑问题所以冷静下来按模块排查效率会大幅提升。最后再分享一个小技巧给本机留下一个干净的“最小环境”。我每次搭新语言环境都会整理一份备忘录记录安装时间、安装路径、版本号、环境变量的值。半年后换新电脑照着备忘录十分钟就能把环境复原。Kotlin 学习也一样这些看着很笨的记录习惯其实才是你从新手变成老手最快的路径。