2 Scala基本语法
大部分基本语法都与Java类似:
- 驼峰命名原则
- 区分大小写
- 单行注释
//
,多行注释/***/
- …
主要区别:
- Scala语句末尾可以写分号
;
,也可以不写.但是如果一行里写多个语句那么分号是需要的 - Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的
- Scala中的数据类型都是对象,没有Java中的原生类型
- Scala中不能使用
i++
, 可以使用i += 1
或者i = i + 1
- …
2.1 数据类型
- Scala中的数据类型都是对象,没有Java中的原生类型。在Scala是可以对数字等基础类型调用方法的,比如:
// Range(2, 4, 6, 8, 10)
println(2.to(10, 2))
2.1.1 基本介绍
数据类型 | 描述 |
---|---|
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754 标准的单精度浮点数 |
Double | 64 位 IEEE 754 标准的双精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 |
Null | null 或空引用 |
Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 |
Any | Any是所有其他类的超类 |
AnyRef | AnyRef类是Scala里所有引用类(reference class)的超类 |
AnyVal | AnyVal类是Scala里所有值类型的超类 |
2.1.2 Null,Nothing,None,Unit,Nil
Null | Trait,其唯一实例为null,是AnyRef的子类 |
Nothing | Trait,所有类型(包括AnyRef和AnyVal)的子类,没有实例 |
None | Option的两个子类之一,另一个是Some,用于安全的函数返回值 |
Unit | 无返回值的函数的类型,和Java的void对应 |
Nil | 长度为 0 的List |
2.2 变量和常量
- 变量 : 变量定义后可以修改,用
var
声明 - 常量 : 常量定义后不可以再修改,用
val
声明
声明变量或常量要给出其初始值
var name: String = "zhangsan"
println(name) // 输出 zhangsan
name = "lisi" // 可修改
println(name) // 输出 lisi
val gender = "m"
println(gender) // 输出 m
// gender = "f" // 错误, 不能给常量赋值
// val hobby // 错误
// var hobby:String // 错误
2.3 访问修饰符
- Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。
- 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。
2.4 运算符
- 算术运算符
+,-,*,/,%
- 关系运算符
== ,!=,>,<,>=,<=
- 逻辑运算符
&&,||,!
- 位运算符
~,&,|,^,<<,>>,>>>
- 赋值运算符
=,+=,*=,/=,%=,<<=,>>=,&=,^=,|=