if分支表达式
if/else表达式有值,这个值就是跟在if或者else之后的表达式的值。
单分支
基本语法:if(条件表达式){执行代码块}
说明:当条件表达式为true时,就会执行{}内的代码。
双分支
基本语法:if(条件表达式){执行代码块1} else{执行代码块2}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2.
多分支
基本语法:if(条件表达式1){执行代码块1}
else if (条件表达式2){执行代码块2}
……
else{执行代码块n}
块表达式
在Scala中,{}块包含一些列表达式,其结果也是一个表达式,块中最后一个表达式的值就是块的值
Scala中的语句终止就是换行,也就是一行一个语句,此时便可以省略“;”,但是当一行有多条语句的时候,就应该使用“;”分隔。在表达式块中同样可以使用换行作为一条语句的分隔。
循环
在Scala中有for循环和while循环,用for循环比较多。
其中while循环和do…while循环和java中的语法结构基本一致,for循环稍有差异。
to和until
to和until主要是用于生成一个列表或者范围
i to j (包换i和j)
i until j(包含i,但不包含j)
for循环
scala中并没有像Java中普通for循环的语法结构,更像是高级for循环
语法格式:
for(变量 <- 集合) {…}
例如
object ForDemo {
def main(args: Array[String]): Unit = {
var sum = 0
for (n <- 1 to 10 reverse){//reverse 进行倒置,即从10到1
sum += n
println(n)
}
println(sum)
}
}
for循环嵌套
除了for循环的基本形态之外,Scala也提供了其他丰富的高级特性,比如
可以在for循环括号里同时包含多组 变量 <- 集合 结构,组之间用分号分隔
for (i <- 1 to 3; j <- 1 to 3) println(10 * i + j)
for循环的这种结构类似Java中的嵌套循环结构。
if循环守卫
可以为嵌套循环通过if表达式添加条件
for (i <- 1 to 3; j <- 1 to 3 if i != j) println(10 * i + j)
注意在if之前并没有分号
循环终止
Scala中没有continue和break,Scala中有三中方式来结束循环:
- 使用return语句来控制循环结束
- 使用循环结束的条件来进行控制
- 还可以使用breakable函数体来进行控制(导入break包,breakable包裹循环体)
异常控制和懒加载
Scala的异常处理和Java类似,一个方法可以通过抛出异常的方法终止相关代码的运行。
调用函数可以捕获这个异常作出相应的处理或者直接退出,在这种情况下,异常会传递给调用函数的调用者,依次向上传递,直到有方法处理这个异常
lazy:懒加载,被lazy所修饰的变量,之后当第一次被调用时候才会进行初始化,之前只是做了语法结构的正确判断
try {
//lazy:懒加载
//被lazy所修饰的变量,之后当第一次被调用时候才会进行初始化,之前只是做了语法结构的正确判断
lazy val line = Source.fromFile("/Users/zx/scala/project/scala-learn/data/hello1.txt").mkString
println(line)
val a = 1/0
}catch {
case fnfe: FileNotFoundException => {
println(fnfe.getMessage)
}
case ame: ArithmeticException => {
println(ame.getMessage)
}
case _ => {
println("通用异常处理")
}
}