kotlin-basic-blog
Kotlin 基础入门:Android 开发者从零开始
本文面向 Android 开发零基础读者,系统介绍 Kotlin 语言的核心语法与特性,并重点讲解协程这一 Android 异步编程的核心工具。
一、为什么 Android 开发者要学 Kotlin?
2017 年 Google 宣布 Kotlin 成为 Android 官方开发语言,2019 年更是宣布 Kotlin 为 Android 开发的首选语言。理由很直接:
- 简洁:用更少的代码完成更多的事,减少样板代码
- 安全:空安全设计在编译期就能拦截大部分 NullPointerException
- 兼容:100% 兼容 Java,可以在同一个项目里混用
- 协程:内置轻量级异步框架,写异步代码像写同步代码一样直观
如果你刚接触 Android 开发,直接从 Kotlin 开始是最好的选择。
二、开发环境准备
运行Kotlin代码也可以用官方在线编辑器 Kotlin Playgroundhttps://play.kotlinlang.org/
或者本地轻量 IDE:IntelliJ IDEACommunity
下面演示Android Studio
安装 Android Studio
前往 Android Studio 官网 下载最新版
安装完成后新建项目,
选择No Activity,
语言选择Kotlin(项目名和路径可改),点击Finish
等待 Gradle 构建完成,即可开始编写 Kotlin 代码
第一个 Kotlin 程序
左上角下拉框选择Project
选中java目录下的包右键
在 Android Studio 中创建 Kotlin 文件,输入:
funmain(){println("Hello, Kotlin!")}点击运行,控制台输出Hello, Kotlin!,你的第一个 Kotlin 程序就跑起来了。
三、Kotlin 基础语法
3.1 变量声明:val 与 var
Kotlin 用两种方式声明变量:
// val(value):只读变量,相当于 Java 的 finalvalname:String="Android"// name = "iOS" // ❌ 编译错误,val 不可重新赋值// var(variable):可变变量varage:Int=20age=21// ✅ 可以重新赋值类型推断:Kotlin 编译器可以自动推断类型,所以通常不需要显式声明类型:
vallanguage="Kotlin"// 自动推断为 StringvalsdkVersion=33// 自动推断为 Int经验建议:优先使用
val,只有确实需要修改变量时才用var。这能让你写出更安全的代码。
3.2 基本数据类型
Kotlin 中一切皆为对象,没有 Java 中的基本类型(int、boolean 等),但编译器会自动优化为原生类型:
| Kotlin 类型 | 说明 | 示例 |
|---|---|---|
Int | 整数 | val x = 100 |
Long | 长整数 | val y = 100L |
Double | 双精度浮点 | val pi = 3.14 |
Float | 单精度浮点 | val f = 3.14f |
Boolean | 布尔值 | val isReady = true |
String | 字符串 | val s = "Hello" |
Char | 字符 | val c = 'A' |
3.3 字符串模板
Kotlin 支持在字符串中直接引用变量:
valname="Kotlin"valversion=1.9println("Hello,$name! Version:$version")// Hello, Kotlin! Version: 1.9// 复杂表达式用 ${}println("Next version:${version+0.1}")3.4 函数定义
// 基本形式funadd(a:Int,b:Int):Int{returna+b}// 表达式函数体(更简洁)funadd(a:Int,b:Int)=a+b// 默认参数fungreet(name:String,greeting:String="Hello"){println("$greeting,$name!")}greet("World")// Hello, World!greet("World","Hi")// Hi, World!四、控制流
4.1 if 表达式
在 Kotlin 中,if是一个表达式,可以返回值:
valmax=if(a>b)aelseb// 等价写法valmax2=if(a>b){println("a is larger")a// 代码块的最后一个表达式作为返回值}else{println("b is larger")b}4.2 when 表达式
when是 Kotlin 对 Javaswitch的现代化替代,功能更强大:
fundescribe(obj:Any):String=when(obj){1->"One""Hello"->"Greeting"isLong->"Long type, value:$obj"!isString->"Not a string"else->"Unknown"}// 不带参数的 when(相当于 if-else 链)funisWeekend(day:String)=when{day=="Saturday"||day=="Sunday"->trueelse->false}4.3 循环
// for 循环(遍历区间)for(iin1..5){println(i)// 输出 1 2 3 4 5}// 半开区间(常用)for(iin0until5){println(i)// 输出 0 1 2 3 4}// 步长for(iin1..10step2){println(i)// 输出 1 3 5 7 9}// 倒序for(iin10downTo1){println(i)// 输出 10 9 8 ... 1}// 遍历集合valfruits=listOf("Apple","Banana","Orange")for(fruitinfruits){println(fruit)}// while 循环(与 Java 相同)varx=5while(x>0){println(x)x--}五、空安全:Kotlin 最核心的特性
NullPointerException(NPE)是 Java 开发中最常见的崩溃原因。Kotlin 在编译期就解决了这个问题。
5.1 可空类型与不可空类型
// 不可空类型(默认):不能赋值为 nullvarname:String="Kotlin"// name = null // ❌ 编译错误// 可空类型:用 ? 标记varnullableName:String?="Kotlin"nullableName=null// ✅ 允许5.2 安全访问操作符
vallen:Int?=nullableName?.length// 等价于 Java:// if (nullableName != null) { return nullableName.length; } else { return null; }// 链式安全访问user?.address?.city?.length// 任何一环为 null,整体返回 null5.3 Elvis 操作符(?:)
// 如果为 null,使用默认值vallen=nullableName?.length?:0// 等价于vallen2=if(nullableName!=null)nullableName.lengthelse0// 在 Android 中很常用valuserName=intent.getStringExtra("name")?:"Guest"5.4 非空断言(!!)——谨慎使用
// 告诉编译器"我确定这里不为 null",但如果为 null 会抛 NPEvallen=nullableName!!.length// ⚠️ 不推荐,除非你 100% 确定最佳实践:尽量使用
?.和?:,避免使用!!。!!相当于放弃了 Kotlin 的空安全保护。
六、面向对象:类与对象
6.1 类的定义
classPerson(valname:String,// 主构造函数参数,自动生成 gettervarage:Int// 自动生成 getter 和 setter){// 初始化块init{println("Person created:$name, age:$age")}// 成员函数funintroduce(){println("Hi, I'm$name,$ageyears old.")}}// 使用valperson=Person("Alice",25)person.introduce()6.2 数据类(data class)
数据类自动生成equals()、hashCode()、toString()、copy()等方法,非常适合用来承载数据:
dataclassUser(valid:Long,valname:String,valemail:String)valuser1=User(1,"Alice","alice@example.com")valuser2=user1.copy(name="Bob")// copy:复制并修改部分字段println(user1)// User(id=1, name=Alice, email=alice@example.com)6.3 继承
// 默认所有类都是 final 的,用 open 标记可继承openclassAnimal(valname:String){openfunspeak(){println("$namemakes a sound")}}classDog(name:String):Animal(name){overridefunspeak(){println("$namebarks: Woof!")}}七、Kotlin 特色语法
7.1 Lambda 表达式
// 基本形式valsum={a:Int,b:Int->a+b}println(sum(3,5))// 8// 作为函数参数(非常常见)valnumbers=listOf(1,2,3,4,5)numbers.forEach{println(it)}// it 是单个参数的默认名称valevens=numbers.filter{it%2==0}// [2, 4]valdoubled=numbers.map{it*2}// [2, 4, 6, 8, 10]7.2 扩展函数
扩展函数让你在不修改源码的情况下给类添加方法:
// 给 String 添加反转函数funString.reverse():String=this.reversed()println("Kotlin".reverse())// niltok// Android 中非常实用funView.show(){this.visibility=View.VISIBLE}funView.hide(){this.visibility=View.GONE}// 使用textView.show()progressBar.hide()7.3 高阶函数
接受函数作为参数或返回函数的函数,称为高阶函数:
funcalculate(a:Int,b:Int,operation:(Int,Int)->Int):Int{returnoperation(a,b)}valresult=calculate(10,5){x,y->x+y}// 15valresult2=calculate(10,5){x,y->x*y}// 50八、学习路线建议
如果你是按照本文的顺序学习,建议再按以下步骤深入:
- 掌握基础语法(本文前三节)→ 能读懂 Kotlin 代码
- 理解空安全(第五节)→ 写出安全的代码
- 熟悉集合操作(Lambda、map、filter)→ 写出简洁的代码
九、总结
Kotlin 是一门现代、简洁、安全的语言,已经成为 Android 开发的事实标准。本文覆盖了 Kotlin 最核心的语法特性:
- 变量声明:优先使用
val,类型自动推断 - 空安全:用
?、?.、?:彻底告别 NullPointerException - 函数特性:默认参数、表达式函数体让代码更简洁
- 扩展函数:不修改源码也能给类添加方法
下一步,建议在实践中不断巩固这些知识。遇到不懂的语法,多看官方文档 kotlinlang.org或者菜鸟教程https://www.runoob.com/kotlin/kotlin-tutorial.html ,多写代码。
如有错误 or 补充,欢迎在评论区讨论。
