数据类型
和Java不同的是,
在Scala中,这些类型都是“类”,
并且都是包scala的成员,
比如,Int的全名是scala.Int。
对于字符串,Scala用java.lang.String类来表示字符串
特殊类型
Unit:表示无值,和java中的void等同,Unit只有一个实例值,写成()。
Null:空值或引用
Nothing:所有其它类型的子类型,表示没有值
例如:
val list1 = List()在不确定值类型时自动定义为Nothong
Any:所有其它类型的超类,任何实例都属于Any类型
AnyRef:所有引用类型的超类
AnyVal:所有值类型的超类
类型间的转换
强制类型转换:
toDouble
toFloat
toLong
toInt
toShort
toChar
字面量
字面量是直接在代码里书写常量值的一种方式
整型字面量定义:
整型字面量用于 Int 类型,如果表示 Long,可以在数字后面添加 L 或者小写 l 作为后缀。
浮点型字面量:
如果浮点数后面有f或者F后缀时,表示这是一个Float类型,否则就是一个Double类型的
布尔型字面量:
布尔型字面量有 true 和 false
字符字面量:
在scala中字符类型表示为半角单引号中的字符
字符串字面量
字符串表示方法是在双引号中 包含一系列字符
多行字符串的表示方法
多行字符串用三个双引号来表示分隔符
变量定义方法
方法一:
val 变量名 = 初始值
var 变量名 = 初始值
#通过类型推断机制自动推断变量类型
方法二:
val 变量名:数据类型 = 初始值
var 变量名:数据类型 = 初始值
变量和常量
1.scala中定义变量使用 var ,定义常量(或值不可再赋值的变量)使用 val;
2.scala每行后面都有 ; 自动推断机制,不用显式写出;
3.scala中变量和常量的类型可以省略,有自动类型推断机制;
4.scala中建议使用驼峰命名法
流程控制语句
-
判断结构:
if (表达式) {
语句块1
} else {
语句块2
}
有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量 -
while循环
while (表达式){
循环体
}
do{
循环体
}while (表达式) -
for循环
for (变量 <- 表达式) {语句块}
其中,“变量<-表达式”被称为“生成器”
for“守卫(guard)”的表达式:过滤出一些满足条件的结果。
基本语法:
for (变量 <- 表达式 if 条件表达式) 语句块
对循环的控制
为了提前终止整个循环或者跳到下一个循环,Scala没有break和continue关键字
Scala提供了一个Breaks类(位于包scala.util.control)。
Breaks类有两个方法用于对循环结构进行控制,即breakable和break
格式:
breakable{
…
if(…) break
…
}
列子:
import util.control.Breaks._ //导入Breaks类的所有方法
val array = Array(1,3,10,5,4)
breakable{
for(i<- array){
if(i>5) break //跳出breakable,终止for循环,相当于Java中的break
println(i)
}
}
// 上面的for语句将输出1,3
for(i<- array){
breakable{
if(i>5) break
//跳出breakable,终止当次循环,相当于Java的continue println(i)
}
}// 上面的for语句将输出1,3,5,4
模式匹配——Match
模式匹配:
1、检查某个值(value)是否匹配某一个模式的机制;
2、是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句;
3、使用match-case语句实现值的条件判断;
4、较java只能对值判断来看,match-case可以实现变量类型、集合的元素、有值或无值的判断
基本结构:
变量名 match{
case 变量值 => 表达式或值
case 变量值 => 表达式或值
……
case _ => 表达式或值
}