Android开发实战班 - Android开发基础之 Kotlin语言基础与特性

Kotlin 是一种现代化的编程语言,由 JetBrains 开发,现已成为 Android 官方支持的开发语言。相比于 Java,Kotlin 提供了更简洁、安全和高效的语法特性,极大地提升了开发效率。本章节将深入讲解 Kotlin 的基础语法和核心特性,帮助学员掌握 Kotlin 在 Android 开发中的应用。

2.1 Kotlin 简介

  • Kotlin 的历史与发展:

    • Kotlin 由 JetBrains 于 2011 年首次发布,2017 年被 Google 宣布为 Android 官方开发语言。
    • Kotlin 1.0 于 2016 年发布,目前最新版本为 Kotlin 1.8.x。
    • Kotlin 不仅可以用于 Android 开发,还支持服务器端开发、Web 开发等。
  • Kotlin 的优势:

    • 简洁性: 相比 Java,Kotlin 代码更简洁,减少样板代码。
    • 安全性: 内置空安全机制,避免空指针异常。
    • 互操作性: Kotlin 与 Java 完全兼容,可以无缝调用 Java 代码。
    • 函数式编程支持: 支持高阶函数、Lambda 表达式等函数式编程特性。
    • 扩展函数: 可以为现有类添加新功能,而无需继承。

2.2 Kotlin 基本语法

2.2.1 数据类型与变量声明
  • 基本数据类型:

    • Int: 32 位有符号整数,例如 val age: Int = 25
    • Double: 64 位浮点数,例如 val price: Double = 19.99
    • Boolean: 布尔类型,true 或 false,例如 val isStudent: Boolean = false
    • Char: 单个字符,例如 val grade: Char = 'A'
    • String: 字符串,例如 val name: String = "Alice"
  • 变量声明:

    • val(不可变变量):声明后不能重新赋值,类似于 Java 中的 final。

      kotlin 复制代码
      val pi: Double = 3.14159
    • var(可变变量):声明后可以重新赋值。

      kotlin 复制代码
      var count: Int = 0
      count = 5
2.2.2 控制流
  • if 表达式:

    • Kotlin 中的 if 是一个表达式,可以返回值。

      kotlin 复制代码
      val max = if (a > b) a else b
  • when 表达式:

    • when 类似于 Java 中的 switch,但功能更强大。

      kotlin 复制代码
      when (x) {
          1 -> println("One")
          2 -> println("Two")
          else -> println("Other")
      }
  • for 循环:

    • 使用 for 循环遍历集合或范围。

      kotlin 复制代码
      for (i in 1..5) {
          println(i)
      }
  • while 和 do-while 循环:

    • 与 Java 中的用法类似。

      kotlin 复制代码
      var i = 0
      while (i < 5) {
          println(i)
          i++
      }
      
      do {
          println(i)
          i++
      } while (i < 5)
2.2.3 函数
  • 函数声明:

    • 使用 fun 关键字声明函数。

      kotlin 复制代码
      fun greet(name: String): String {
          return "Hello, $name!"
      }
  • 单表达式函数:

    • 当函数只有一个表达式时,可以省略大括号和 return 关键字。

      kotlin 复制代码
      fun add(a: Int, b: Int) = a + b
  • 默认参数和命名参数:

    • 函数参数可以有默认值,调用时可以省略参数。

      kotlin 复制代码
      fun build(title: String, width: Int = 800, height: Int = 600) {
          // 函数体
      }
      
      build("My Window", 1024) // width=1024, height=600
      build(title = "My Window", height = 768) // width=800, height=768

2.3 Kotlin 面向对象编程

2.3.1 类与对象
  • 类声明:

    • 使用 class 关键字声明类。

      kotlin 复制代码
      class Person(val name: String, var age: Int)
  • 对象创建:

    • 使用 val 或 var 声明对象。

      kotlin 复制代码
      val person = Person("Alice", 25)
2.3.2 继承与多态
  • 继承:

    • Kotlin 中的类默认是不可继承的,需要使用 open 关键字。

      kotlin 复制代码
      open class Animal(val name: String)
      
      class Dog(name: String) : Animal(name)
  • 方法重写:

    • 使用 override 关键字重写父类方法。

      kotlin 复制代码
      open class Animal(val name: String) {
          open fun makeSound() {
              println("Some sound")
          }
      }
      
      class Dog(name: String) : Animal(name) {
          override fun makeSound() {
              println("Woof")
          }
      }
2.3.3 接口与抽象类
  • 接口:

    • 使用 interface 关键字声明接口。

      kotlin 复制代码
      interface Drivable {
          fun drive()
      }
      
      class Car : Drivable {
          override fun drive() {
              println("Driving a car")
          }
      }
  • 抽象类:

    • 使用 abstract 关键字声明抽象类和方法。

      kotlin 复制代码
      abstract class Shape {
          abstract fun area(): Double
      }
      
      class Circle(val radius: Double) : Shape() {
          override fun area() = Math.PI * radius * radius
      }

2.4 Kotlin 高级特性

2.4.1 Lambda 表达式与高阶函数
  • Lambda 表达式:

    • 匿名函数,可以作为参数传递给高阶函数。

      kotlin 复制代码
      val sum = { a: Int, b: Int -> a + b }
      println(sum(2, 3)) // 输出 5
  • 高阶函数:

    • 接受函数作为参数或返回函数的函数。

      kotlin 复制代码
      fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
          return operation(a, b)
      }
      
      val result = operate(5, 3) { a, b -> a * b }
      println(result) // 输出 15
2.4.2 扩展函数
  • 扩展函数 :
    • 为现有类添加新功能,而无需继承。

      kotlin 复制代码
      fun String.isPalindrome(): Boolean {
          return this.reversed() == this
      }
      
      println("madam".isPalindrome()) // 输出 true
2.4.3 数据类与解构声明
  • 数据类:

    • 使用 data 关键字声明数据类,自动生成 equals(), hashCode(), toString() 等方法。

      kotlin 复制代码
      data class User(val name: String, val age: Int)
      
      val user = User("Alice", 25)
      println(user) // 输出 User(name=Alice, age=25)
  • 解构声明:

    • 可以将数据类对象解构为多个变量。

      kotlin 复制代码
      val (name, age) = user
      println("$name is $age years old") // 输出 Alice is 25 years old
2.4.4 空安全机制
  • 可空类型:

    • 使用 ? 标记可空类型。

      kotlin 复制代码
      var name: String? = "Alice"
      name = null
  • 安全调用操作符:

    • 使用 ?. 进行安全调用,避免空指针异常。

      kotlin 复制代码
      println(name?.length) // 如果 name 不为 null,则输出 length,否则输出 null
  • Elvis 操作符:

    • 使用 ?: 提供默认值。

      kotlin 复制代码
      val length = name?.length ?: 0
  • 非空断言操作符:

    • 使用 !! 强制解包可空类型,如果为 null 则抛出异常。

      kotlin 复制代码
      println(name!!.length) // 如果 name 为 null,则抛出 NullPointerException

通过本章节的学习,学员将能够掌握 Kotlin 的基本语法和高级特性,理解 Kotlin 在 Android 开发中的应用,为后续的 Android 应用开发做好充分准备。

作者简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

相关推荐
hunterandroid9 分钟前
Room 数据库迁移与多表关联查询实战
android
吐了啊取名字太难20 分钟前
Android 相机 USB 连接别写在 Activity 里:锁屏、切页和后台传输怎么设计?
android·数码相机
hunterandroid1 小时前
Android ViewModel + LiveData 工程实践:配置变更、一次性事件与状态恢复
android
2501_915921432 小时前
iOS应用从开发到上架App Store的完整步骤详解
android·ios·小程序·https·uni-app·iphone·webview
HackTwoHub2 小时前
免 Root 安卓渗透工具 Stryker|把 Kali 装进手机!随身无线渗透工作站,内置 Nmap/Nuclei/Metasploit 全套武器库
android·linux·运维·人工智能·web安全·macos·智能手机
朱涛的自习室12 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
.Bryce.16 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
方舟小孩17 小时前
开源办公软件海豹办公 1.9.15 实战 从模板异常到 Android WebView 资源回归
android
用户21816970493018 小时前
Kotlin 语法四 协程
android