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 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

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

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work3 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work3 天前
ch21 签名、校验与发版
kotlin
微信开发api3 天前
微信iPad协议怎么用?基于协议的二次开发实践
微信·机器人·ipad