一、scala的特点
-
面向对象特性
每个值都是对象对象的数据类型和行为由类(Class)和特质(Trait,类似于接口)描述
利用特质实现混入式多重继承
-
函数式编程
每个函数都是一个值
支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配…… -
Scala是静态类型语言、强类型语言
-
扩展性:隐式类、字符串插值
二、scala关键字
三、变量与常量
- 变量 :复制后可以改变,生命周期中可以被多次赋值
- 使用var修饰
scala> var a:Int=1
a: Int = 1
scala> a=2
a: Int = 2
scala> a
res0: Int = 2
- 常量: 赋值后不可变,类似于Java中的final变量
- 使用val修饰
scala> val b:Int=1
b: Int = 1
scala> b=2
<console>:12: error: reassignment to val
b=2
^
scala> b
res1: Int = 1
四、使用类型别名定义变量
可以这么做,但是不建议使用,不利于阅读
type关键字
type 类型别名=类型
scala> type S=String
defined type alias S
scala> var a:S=1
<console>:12: error: type mismatch;
found : Int(1)
required: S
(which expands to) String
var a:S=1
^
scala> var a:S="aa"
a: S = aa
五、数据类型
- Scala数据类型层次结构
- Any:所有类型的超类(顶级类型)
- AnyVal:表示值类型的超类
- AnyRef:表示引用类型的超类,对应java.lang.Object
- Unit:表示无值,类似Java中的void
- Nothing:所有类型的子类
- Null:表示null或空引用
六、字符串插值
- s插值器:允许将变量引用、表达式直接插入字面字符中
scala> val name="lisi"
name: String = lisi
scala> println(s"Hello,$name")
Hello,lisi
- f插值器
scala> val height = 1.9
height: Double = 1.9
scala> name
res3: String = lisi
scala> println(f"$name%s is $height%2.2f ")
lisi is 1.90
- raw插值器
scala> s"a\nb" //输出换行符
res6: String =
a
b
scala> raw"a\nb" //输出原始字符
res7: String = a\nb