Kotlin入门:Android开发新语言快速上手(踩坑经验版)
作者:一名维护过多个开源 Android 项目的工程师,也带过不少零基础学员。今天这篇文章,就是我当初自己刚学 Kotlin 时最想看到的——没有术语轰炸,全是实打实的“怎么写”和“为什么错”。
为什么我要写这篇教程?
2017年 Google 宣布 Kotlin 成为 Android 官方开发语言时,我和很多 Java 老兵一样,第一反应是:“又来?Java 不香吗?”
但后来我试了两周,彻底真香了。
更简洁、更安全、更现代——Kotlin 能让你用一半代码写出同样功能,还能避免很多 Java 里常见的空指针崩溃。更重要的是:现在几乎所有的 Android 新项目都用 Kotlin 写,连大厂面试题、简历筛选都明确写着“熟悉 Kotlin 优先”。
如果你是前端转移动、产品想懂技术、或者纯新手准备入行,这篇教程就是为你量身定制的。我会用最直白的语言+真实踩过的坑,带你从零跑通第一个 Kotlin 程序。
一、Kotlin 是什么?能干啥?
简单说:Kotlin 是一门运行在 Android 和 JVM 上的编程语言,专为简化开发而生。
- 它不是“前端”语言(前端一般指网页/小程序),而是 Android 移动端开发的主力语言
- 但它语法受 JavaScript、Swift 等现代语言影响,对新手很友好
- 和 Java 100% 互操作:你可以在一个项目里混用 Java 和 Kotlin
📌 小贴士:别被“语言”吓到。就像你会用中文点外卖、用英文查资料一样,编程语言只是你和手机“沟通”的工具。Kotlin 就是 Android 开发者的新“普通话”。
二、环境准备:5 分钟搭好开发环境
步骤 1:安装 Android Studio
- 访问 https://developer.android.com/studio
- 下载最新版(Windows/macOS/Linux 都支持)
- 安装时一路默认选项即可(除非你知道自己在改什么)
💡 我当初学的时候,为了省时间跳过更新,结果新建项目时报错。一定要装最新稳定版!
步骤 2:创建你的第一个 Kotlin 项目
- 打开 Android Studio
- 点击 “New Project”
- 选择 “Empty Activity”
- 在 “Language” 选项中,务必选 Kotlin(默认可能还是 Java)
- 填好项目名(比如
MyFirstKotlinApp),点击 Finish
等待 Gradle 同步完成(第一次会慢一点),你就看到代码编辑器了!
⚠️ 常见坑:如果 Language 里没看到 Kotlin,说明你 Android Studio 版本太旧,或者没装 Kotlin 插件。去
File > Settings > Plugins搜 Kotlin 确保已启用。
三、核心概念:Kotlin 到底“简”在哪?
我们不讲理论,直接对比 Java 和 Kotlin 的写法:
1. 变量声明:val vs var
| 用途 | Java 写法 | Kotlin 写法 |
|---|---|---|
| 不可变变量(推荐) | final String name = "小明"; |
val name = "小明" |
| 可变变量 | String name = "小明";name = "小红"; |
var name = "小明"name = "小红" |
val= value(值不能改),类似 JS 的constvar= variable(值可改),类似 JS 的let
✅ 最佳实践:能用
val就别用var。不可变性让代码更安全,减少意外修改。
2. 函数定义:简洁到离谱
// 定义一个函数:输入名字,返回问候语
fun greet(name: String): String {
return "Hello, $name!"
}
// 更简洁写法(单表达式函数)
fun greet(name: String) = "Hello, $name!"
注意:
fun关键字定义函数- 参数类型写在参数名后面(
name: String) - 字符串里直接用
$name插值,不用+拼接
💡 我第一次写
$name时忘了加$,结果输出"Hello, name!",调试了半小时……记住:插值必须加$!
3. 空安全:告别 NullPointerException!
这是 Kotlin 最牛的设计!
var name: String = "小明" // 不能为 null
var maybeName: String? = null // 加 ? 表示可以为 null
// 安全调用:只有非 null 时才执行
maybeName?.length // 如果 maybeName 是 null,结果也是 null,不会崩!
// Elvis 操作符:提供默认值
val len = maybeLength ?: 0 // 如果左边是 null,就用右边的 0
🛑 Java 坑:
String s = null; s.length();→ 直接崩溃!
✅ Kotlin 坑:如果你强行用!!(比如maybeName!!.length),也会崩溃——所以别乱用!!!
四、实战:做一个“简历生成器”小 App
为什么选这个?因为产品、前端、求职者都能用上!顺便练练布局+逻辑。
目标功能:
用户输入姓名、职位,点击按钮,下方显示格式化的简历片段。
步骤 1:修改界面(activity_main.xml)
找到 app/src/main/res/layout/activity_main.xml,换成以下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名" />
<EditText
android:id="@+id/etJob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入职位" />
<Button
android:id="@+id/btnGenerate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="生成简历" />
<TextView
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="18sp" />
</LinearLayout>
步骤 2:写 Kotlin 逻辑(MainActivity.kt)
打开 MainActivity.kt,替换 onCreate 方法如下:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 找到界面上的控件
val etName = findViewById<EditText>(R.id.etName)
val etJob = findViewById<EditText>(R.id.etJob)
val btnGenerate = findViewById<Button>(R.id.btnGenerate)
val tvResult = findViewById<TextView>(R.id.tvResult)
// 设置按钮点击事件
btnGenerate.setOnClickListener {
val name = etName.text.toString().trim()
val job = etJob.text.toString().trim()
if (name.isEmpty() || job.isEmpty()) {
tvResult.text = "姓名和职位不能为空!"
return@setOnClickListener
}
// 生成简历文本
val resume = """
姓名:$name
职位:$job
—— 这是一份由 Kotlin 自动生成的极简简历
""".trimIndent()
tvResult.text = resume
}
}
}
关键知识点解释:
findViewById<EditText>(R.id.etName):通过 ID 找到界面上的输入框etName.text.toString():获取输入框内容(注意要转成 String)trim():去掉首尾空格(避免用户只输空格)return@setOnClickListener:提前退出点击事件(类似 JS 的 return)""" ... """:多行字符串,配合trimIndent()自动对齐
🔧 踩坑记录:我一开始忘了
.toString(),结果text是Editable类型,编译报错。EditText 的 text 必须 toString() 才是 String!
五、新手常见问题 & 解决方案
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 点 Run 没反应 | 没连接模拟器或真机 | 点顶部设备图标,创建 AVD 或插上手机(开 USB 调试) |
| 代码爆红(红色波浪线) | Kotlin 插件未启用 / Gradle 同步失败 | 点右上角 “Sync Now”,或重启 AS |
| 点击按钮 App 崩溃 | 用了 !! 强制解包 null |
改用 ?. 或 ?:,加判空逻辑 |
| 中文显示乱码 | 文件编码不是 UTF-8 | File > File Encoding > 选 UTF-8 |
📢 重要提醒:不要一遇到错就删项目重来!90% 的问题看 Logcat(底部面板)里的红色错误信息就能定位。
六、学习建议:下一步怎么走?
1. 简历 & 面试题准备方向
- 在简历“技能”栏写:“掌握 Kotlin 基础语法,能独立开发简单 Android 应用”
- 高频面试题准备:
- Kotlin 和 Java 的主要区别?
val和var的区别?- 如何处理空指针?
?.、?:、!!分别是什么?
2. 给不同背景的学习者建议
- 前端转移动:你已经懂函数、变量、事件,重点学 Android 生命周期和 UI 控件
- 产品经理:不必深究,但理解 Kotlin 能帮你和技术沟通(比如知道“空安全”意味着更少崩溃)
- 纯新手:先把这个“简历生成器”改成“面试题抽签器”,巩固基础
3. 推荐学习路径
1. 掌握变量、函数、条件、循环 → 本教程已覆盖
2. 学习 Android 基础组件(Activity, TextView, Button)
3. 了解列表(RecyclerView)和网络请求(Retrofit)
4. 尝试用 Compose(Kotlin 的现代 UI 框架)重写界面
结语
Kotlin 不是魔法,但它确实让 Android 开发变得更少出错、更少代码、更多乐趣。我带过的学员里,有人用本文的“简历生成器”思路,真的做了一个帮朋友改简历的小工具,还上了 GitHub Trending。
你不需要一开始就写复杂 App。先跑通一行代码,再跑通一个功能,最后你会发现:原来我也能做出有用的东西。
最后送你一句我写在开源项目 README 里的话:
“Every expert was once a beginner. Your first line of Kotlin matters.”
现在,打开 Android Studio,敲下你的第一行 val hello = "Hello, Kotlin!" 吧!

评论 0