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: 布尔类型,truefalse,例如 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)
      }
  • whiledo-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)
  • 对象创建

    • 使用 valvar 声明对象。

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

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

相关推荐
BD_Marathon9 小时前
【MySQL】函数
android·数据库·mysql
西西学代码10 小时前
安卓开发---耳机的按键设置的UI实例
android·ui
maki07714 小时前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架15 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid18 小时前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl19 小时前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
旷野说20 小时前
Android Studio Narwhal 3 特性
android·ide·android studio
maki0771 天前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
xhBruce1 天前
InputReader与InputDispatcher关系 - android-15.0.0_r23
android·ims
领创工作室1 天前
安卓设备分区作用详解-测试机红米K40
android·java·linux