当前位置: 首页 > news >正文

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

  1. 前往 Android Studio 官网 下载最新版

  2. 安装完成后新建项目,

  3. 选择No Activity

  4. 语言选择Kotlin(项目名和路径可改),点击Finish

  5. 等待 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,整体返回 null

5.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

八、学习路线建议

如果你是按照本文的顺序学习,建议再按以下步骤深入:

  1. 掌握基础语法(本文前三节)→ 能读懂 Kotlin 代码
  2. 理解空安全(第五节)→ 写出安全的代码
  3. 熟悉集合操作(Lambda、map、filter)→ 写出简洁的代码

九、总结

Kotlin 是一门现代、简洁、安全的语言,已经成为 Android 开发的事实标准。本文覆盖了 Kotlin 最核心的语法特性:

  • 变量声明:优先使用val,类型自动推断
  • 空安全:用??.?:彻底告别 NullPointerException
  • 函数特性:默认参数、表达式函数体让代码更简洁
  • 扩展函数:不修改源码也能给类添加方法

下一步,建议在实践中不断巩固这些知识。遇到不懂的语法,多看官方文档 kotlinlang.org或者菜鸟教程https://www.runoob.com/kotlin/kotlin-tutorial.html ,多写代码。


如有错误 or 补充,欢迎在评论区讨论。

http://www.cnnetsun.cn/news/3148461.html

相关文章:

  • 89个公共Tracker如何让BT下载告别“孤岛困境“?
  • 剧云推出分镜大师:让剧本更快变成可拍摄的镜头方案
  • Deceive:终极游戏隐身指南 - 如何在英雄联盟、VALORANT和符文大地传说中保持隐身状态
  • 《鸿蒙原生应用从0-1构建:项目工程结构与核心配置全景解析》
  • ExplorerPatcher深度解析:重塑Windows界面体验的高效工具
  • Node.js 插件沙箱:开放扩展之前先限制能力
  • Go 泛型的运行时性能:单态化、接口装箱与编译器优化的基准分析
  • OBS美颜文章_终极指南
  • 别再手写Bug了!用Python+LangGraph实现AI自修复代码的完整指南
  • AI机器学习高级数学与优化
  • SSTI攻击链构造手册(带WAF绕过)
  • 创客指南:oDrive X2212电机从零到闭环的完整配置流程
  • 2026外贸获客渠道全面洗牌:AI正在重新分配全球流量,你的品牌在答案里吗?
  • 香农公式极限推导
  • R语言多分类Logistic回归变量筛选实战:最优子集与逐步回归
  • 【硬件+APP+云平台】9.智能洗衣系统-WiFi-基于STM32嵌入式物联网单片机软硬件毕业生系统设计
  • 2026免费好用的去水印软件推荐:电脑手机在线工具优缺点对比
  • 题解:洛谷 B4554 [GESP202606 二级] 菱形
  • 基于EGEUNet的烟叶病害智能识别系统设计与实现
  • 如何免费下载国家中小学智慧教育平台电子课本PDF:完整指南
  • LSTM 超参数网格搜索:记忆单元、批次大小与 Dropout 的 3 维对比实验
  • Java毕业设计-基于 JavaWeb 的美容美发管理系统的设计与实现 美容院会员消费预约管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 国产大模型生存四道生死线:成本、适配、进化与变现
  • gInk:让屏幕标注像呼吸一样自然的数字画笔
  • pytest-order插件详解:精准控制Python测试用例执行顺序
  • 开源大模型选型指南:Qwen2、Llama 3与DeepSeek技术对比解析
  • 3分钟解决Windows连接iPhone网络共享的终极方案
  • 终极指南:Windows风扇控制神器FanControl,免费打造静音高效PC散热系统
  • Java毕设选题推荐:校园作业发布与家长查询管理系统的设计与实现 家校消息通知与学生考勤公示系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 从零实现SHA-1哈希算法:原理、代码与性能优化实战