04_变量和数据类型_基础

一、核心概念

  • 变量与常量:Scala 使用 var 定义变量(可变),val 定义常量(不可变)。

  • 类型推断:Scala 是静态类型语言,但支持编译期自动推断类型,无需显式声明。

  • 数据类型体系:完全面向对象,所有类型都是 Any 的子类,包括值类型与引用类型。

  • 数值类型ByteShortIntLongFloatDouble

  • 字符与布尔类型CharBoolean

  • Unit / Null / Nothing:特殊类型层次结构,用于表达无值、空值和异常控制流。


二、提出问题

  • 如何在 Scala 中定义变量和常量?

  • 类型系统与 Java 有何不同?

  • Scala 如何在保证静态类型安全的同时,减少类型声明的冗余?

  • 特殊类型(UnitNullNothing)的作用是什么?


三、论点与解决方案

  • 论点1:统一的面向对象体系
    Scala 取消 Java 的基本类型与包装类区分,所有类型均继承自 Any,彻底面向对象。

  • 论点2:类型推断提升开发效率
    变量声明时可省略类型,由编译器自动推断,但仍保证类型安全。

  • 论点3:不可变性优先
    val 常量是默认推荐方式,有助于编写函数式编程风格代码,减少副作用。

  • 论点4:特殊类型增强表达力

    • Unit:表示无返回值,相当于 Java 的 void

    • Null:仅适用于引用类型,表示空引用。

    • Nothing:所有类型的子类,用于异常抛出或非正常终止。


四、关键机制 / 细节

  • 变量定义语法var name: Type = value,类型可省略。

  • 常量定义语法val name: Type = value,一旦赋值不可更改。

  • 数值字面量:整型默认 Int,浮点型默认 Double

  • 自动类型提升:较小范围数值可隐式转换为更大范围类型(如 Int → Long)。

  • 字符串插值s"..." 可直接嵌入变量。

  • 类型层次结构

    • Any:所有类型的超类。

    • AnyVal:数值类型和布尔、字符等值类型。

    • AnyRef:所有引用类型。

    • NullAnyRef 的子类。

    • Nothing:所有类型的子类。


五、总结

  • Scala 的变量和数据类型体系是对 Java 的扩展与简化:统一了对象体系、增强了类型表达力、减少了样板代码。

  • val 不可变变量是函数式编程的核心理念,推荐默认使用。

  • 特殊类型(UnitNullNothing)为异常处理、函数返回值和系统底层设计提供了灵活支持。

  • 学习重点:val/var 的使用区别、类型推断机制、类型层次结构


六、实战(代码案例)

案例1:变量与常量

object VarDemo {
  def main(args: Array[String]): Unit = {
    var age: Int = 25   // 可变变量
    val name = "Alice"  // 不可变常量,类型推断为 String

    println(s"姓名: $name, 年龄: $age")
    age += 1
    println(s"更新后的年龄: $age")
    // name = "Bob" // ❌ 错误,val 不可重新赋值
  }
}
  • 知识点varval 区别;类型推断;字符串插值。

案例2:特殊类型

object TypeDemo {
  def printInfo(): Unit = {  // Unit 表示无返回值
    println("这是一个无返回值的方法")
  }

  def throwError(): Nothing = {
    throw new RuntimeException("异常终止")
  }

  def main(args: Array[String]): Unit = {
    printInfo()
    // throwError() // 调用后程序直接终止
  }
}
  • 知识点Unit 等价于 voidNothing 表示异常终止;特殊类型在控制流中的作用。
posted @ 2025-09-03 15:01  s1332177151  阅读(8)  评论(0)    收藏  举报