04_变量和数据类型_基础
一、核心概念
-
变量与常量:Scala 使用
var定义变量(可变),val定义常量(不可变)。 -
类型推断:Scala 是静态类型语言,但支持编译期自动推断类型,无需显式声明。
-
数据类型体系:完全面向对象,所有类型都是
Any的子类,包括值类型与引用类型。 -
数值类型:
Byte、Short、Int、Long、Float、Double。 -
字符与布尔类型:
Char、Boolean。 -
Unit / Null / Nothing:特殊类型层次结构,用于表达无值、空值和异常控制流。
二、提出问题
-
如何在 Scala 中定义变量和常量?
-
类型系统与 Java 有何不同?
-
Scala 如何在保证静态类型安全的同时,减少类型声明的冗余?
-
特殊类型(
Unit、Null、Nothing)的作用是什么?
三、论点与解决方案
-
论点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:所有引用类型。 -
Null:AnyRef的子类。 -
Nothing:所有类型的子类。
-
五、总结
-
Scala 的变量和数据类型体系是对 Java 的扩展与简化:统一了对象体系、增强了类型表达力、减少了样板代码。
-
val不可变变量是函数式编程的核心理念,推荐默认使用。 -
特殊类型(
Unit、Null、Nothing)为异常处理、函数返回值和系统底层设计提供了灵活支持。 -
学习重点: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 不可重新赋值
}
}
- 知识点:
var与val区别;类型推断;字符串插值。
案例2:特殊类型
object TypeDemo {
def printInfo(): Unit = { // Unit 表示无返回值
println("这是一个无返回值的方法")
}
def throwError(): Nothing = {
throw new RuntimeException("异常终止")
}
def main(args: Array[String]): Unit = {
printInfo()
// throwError() // 调用后程序直接终止
}
}
- 知识点:
Unit等价于void;Nothing表示异常终止;特殊类型在控制流中的作用。

浙公网安备 33010602011771号