kotlin-basic-blog

发布时间:2026/7/5 1:18:16
kotlin-basic-blog Kotlin 基础入门Android 开发者从零开始本文面向 Android 开发零基础读者系统介绍 Kotlin 语言的核心语法与特性并重点讲解协程这一 Android 异步编程的核心工具。一、为什么 Android 开发者要学 Kotlin2017 年 Google 宣布 Kotlin 成为 Android 官方开发语言2019 年更是宣布 Kotlin 为 Android 开发的首选语言。理由很直接简洁用更少的代码完成更多的事减少样板代码安全空安全设计在编译期就能拦截大部分 NullPointerException兼容100% 兼容 Java可以在同一个项目里混用协程内置轻量级异步框架写异步代码像写同步代码一样直观如果你刚接触 Android 开发直接从 Kotlin 开始是最好的选择。二、开发环境准备运行Kotlin代码也可以用官方在线编辑器 Kotlin Playgroundhttps://play.kotlinlang.org/或者本地轻量 IDEIntelliJ 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 与 varKotlin 用两种方式声明变量// valvalue只读变量相当于 Java 的 finalvalname:StringAndroid// name iOS // ❌ 编译错误val 不可重新赋值// varvariable可变变量varage:Int20age21// ✅ 可以重新赋值类型推断Kotlin 编译器可以自动推断类型所以通常不需要显式声明类型vallanguageKotlin// 自动推断为 StringvalsdkVersion33// 自动推断为 Int经验建议优先使用val只有确实需要修改变量时才用var。这能让你写出更安全的代码。3.2 基本数据类型Kotlin 中一切皆为对象没有 Java 中的基本类型int、boolean 等但编译器会自动优化为原生类型Kotlin 类型说明示例Int整数val x 100Long长整数val y 100LDouble双精度浮点val pi 3.14Float单精度浮点val f 3.14fBoolean布尔值val isReady trueString字符串val s HelloChar字符val c A3.3 字符串模板Kotlin 支持在字符串中直接引用变量valnameKotlinvalversion1.9println(Hello,$name! Version:$version)// Hello, Kotlin! Version: 1.9// 复杂表达式用 ${}println(Next version:${version0.1})3.4 函数定义// 基本形式funadd(a:Int,b:Int):Int{returnab}// 表达式函数体更简洁funadd(a:Int,b:Int)ab// 默认参数fungreet(name:String,greeting:StringHello){println($greeting,$name!)}greet(World)// Hello, World!greet(World,Hi)// Hi, World!四、控制流4.1 if 表达式在 Kotlin 中if是一个表达式可以返回值valmaxif(ab)aelseb// 等价写法valmax2if(ab){println(a is larger)a// 代码块的最后一个表达式作为返回值}else{println(b is larger)b}4.2 when 表达式when是 Kotlin 对 Javaswitch的现代化替代功能更强大fundescribe(obj:Any):Stringwhen(obj){1-OneHello-GreetingisLong-Long type, value:$obj!isString-Not a stringelse-Unknown}// 不带参数的 when相当于 if-else 链funisWeekend(day:String)when{daySaturday||daySunday-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}// 遍历集合valfruitslistOf(Apple,Banana,Orange)for(fruitinfruits){println(fruit)}// while 循环与 Java 相同varx5while(x0){println(x)x--}五、空安全Kotlin 最核心的特性NullPointerExceptionNPE是 Java 开发中最常见的崩溃原因。Kotlin 在编译期就解决了这个问题。5.1 可空类型与不可空类型// 不可空类型默认不能赋值为 nullvarname:StringKotlin// name null // ❌ 编译错误// 可空类型用 ? 标记varnullableName:String?KotlinnullableNamenull// ✅ 允许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使用默认值vallennullableName?.length?:0// 等价于vallen2if(nullableName!null)nullableName.lengthelse0// 在 Android 中很常用valuserNameintent.getStringExtra(name)?:Guest5.4 非空断言!!——谨慎使用// 告诉编译器我确定这里不为 null但如果为 null 会抛 NPEvallennullableName!!.length// ⚠️ 不推荐除非你 100% 确定最佳实践尽量使用?.和?:避免使用!!。!!相当于放弃了 Kotlin 的空安全保护。六、面向对象类与对象6.1 类的定义classPerson(valname:String,// 主构造函数参数自动生成 gettervarage:Int// 自动生成 getter 和 setter){// 初始化块init{println(Person created:$name, age:$age)}// 成员函数funintroduce(){println(Hi, Im$name,$ageyears old.)}}// 使用valpersonPerson(Alice,25)person.introduce()6.2 数据类data class数据类自动生成equals()、hashCode()、toString()、copy()等方法非常适合用来承载数据dataclassUser(valid:Long,valname:String,valemail:String)valuser1User(1,Alice,aliceexample.com)valuser2user1.copy(nameBob)// copy复制并修改部分字段println(user1)// User(id1, nameAlice, emailaliceexample.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-ab}println(sum(3,5))// 8// 作为函数参数非常常见valnumberslistOf(1,2,3,4,5)numbers.forEach{println(it)}// it 是单个参数的默认名称valevensnumbers.filter{it%20}// [2, 4]valdoublednumbers.map{it*2}// [2, 4, 6, 8, 10]7.2 扩展函数扩展函数让你在不修改源码的情况下给类添加方法// 给 String 添加反转函数funString.reverse():Stringthis.reversed()println(Kotlin.reverse())// niltok// Android 中非常实用funView.show(){this.visibilityView.VISIBLE}funView.hide(){this.visibilityView.GONE}// 使用textView.show()progressBar.hide()7.3 高阶函数接受函数作为参数或返回函数的函数称为高阶函数funcalculate(a:Int,b:Int,operation:(Int,Int)-Int):Int{returnoperation(a,b)}valresultcalculate(10,5){x,y-xy}// 15valresult2calculate(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 补充欢迎在评论区讨论。