news 2026/7/5 1:18:04

kotlin-basic-blog

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 补充,欢迎在评论区讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 1:17:02

89个公共Tracker如何让BT下载告别“孤岛困境“?

89个公共Tracker如何让BT下载告别"孤岛困境"? 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 你是否曾经面对一个99%完成的下载任务,却因…

作者头像 李华
网站建设 2026/7/5 1:16:38

剧云推出分镜大师:让剧本更快变成可拍摄的镜头方案

很多人手里有一份剧本,却没办法让它顺利进入拍摄准备。不是不想拍。是剧本写完之后,还要拆场次、想镜头、估时长、定景别、安排机位、设计声音和转场。对于很多短剧团队、独立导演、广告创作者、AI 视频创作者和影视学生来说,真正卡住他们的不…

作者头像 李华
网站建设 2026/7/5 1:14:55

《鸿蒙原生应用从0-1构建:项目工程结构与核心配置全景解析》

文章目录前言📑 目录一、 鸿蒙工程的宏观宇宙:Stage 模型与目录拓扑1.1 核心目录结构速览二、 构建大脑深度解剖:build-profile.json52.1 顶级节点与多产品矩阵 (products)2.2 严格模式 (strictMode):架构师的纪律鞭尺2.3 模块挂载…

作者头像 李华
网站建设 2026/7/5 1:13:46

ExplorerPatcher深度解析:重塑Windows界面体验的高效工具

ExplorerPatcher深度解析:重塑Windows界面体验的高效工具 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher ExplorerPatcher是一款专…

作者头像 李华
网站建设 2026/7/5 1:13:13

Node.js 插件沙箱:开放扩展之前先限制能力

Node.js 插件沙箱:开放扩展之前先限制能力 一、插件系统会放大风险 开源工具做到一定阶段,用户会希望写插件:自定义命令、接入模型、改输出格式、增加发布目标。插件系统能让生态变活,但也会把未知代码引入运行环境。Node.js 插件…

作者头像 李华