1、基本数据类型
数据类型有九种,分别是Byte、Char、Short、Int、Long、Float、Double、Boolean、String。
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32位IEEE754单精度浮点数 |
Double | 64位IEEE754单精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
String属于java.lang包,其余所有的基本类型都是Scala的包成员。
2、变量声明
Scala可以通过var和val来声明变量
- val类型的变量声明之后就不可以在赋值
这里的Scala将根据类型推断推断出i的类型是Int并把10赋值给它。然后打印出来,最后想要将11赋值给i的时候将会出错,因为val变量是不可变的
scala> val i = 10 i: Int = 10 scala> println(i) 10 scala> i = 11 <console>:25: error: reassignment to val i = 11 ^
- Scala允许一次定义多个变量
scala> val i,j = 10 i: Int = 10 j: Int = 10
- 定义float类型的变量,同样适用类型推断,也可以显式的指定数据类型,这里显式的指定了Int和String
scala> val i = 10f i: Float = 10.0 scala> val i:Int = 10 i: Int = 10 scala> val name:String = "a name" name: String = a name
- var类型变量初始化后值可以修改
scala> var i = 5 i: Int = 5 scala> i = 6 i: Int = 6 scala> var name = "a name" name: String = a name scala> name = "second name" name: String = second name scala> var name:String = "third name" name: String = third name
3、if语句
- 普通的判断使用
scala> var i = if(3>1) 3 else 1 i: Int = 3 scala> if(i < 5){ | print("i < 5") | } i < 5 scala> if(i < 5){ | print("i < 5") | }else{ | print("i > 5") | } i < 5
- 将if语句赋值给一个变量
scala> var result = if(i == 3){10} result: AnyVal = 10
4、for循环
- 简单的循环
使用to的话 i的值将是1到10,使用until不包含尾部,i的值将是1到9
scala> for(i <- 1 to 10)print(i + " ") 1 2 3 4 5 6 7 8 9 10 scala> for(i <- 1 until 10)print(i + " ") 1 2 3 4 5 6 7 8 9
- for循环中使用if
scala> for(i <-1 to 10 if i%2 == 0)println(i + " ") 2 4 6 8 10 scala> for(i <-1 to 10 if i%2 == 0;if i != 2)println(i + " ") 4 6 8 10
- 嵌套枚举
如果都不加限定if那么第一个循环条件将会依次执行第二个循环条件的每一个变量值
scala> for(i <- 1 to 5; j<- 2 to 6 )print(i*j + " ") 2 3 4 5 6 4 6 8 10 12 6 9 12 15 18 8 12 16 20 24 10 15 20 25 30
如果给第二个循环条件加上限定if判断,那么第二个循环条件就会依次执行第一个循环条件的每一个变量值
scala> for(i <- 1 to 5; j<- 2 to 6 if j%2 == 0 )print(i*j + " ") 2 4 6 4 8 12 6 12 18 8 16 24 10 20 30
那如果给第一个加限定条件的话,第一个循环条件又将会依次执行第二个循环条件的每一个变量值
scala> for(i <- 1 to 5 if i%2 == 0; j<- 2 to 6 )print(i*j + " ") 4 6 8 10 12 8 12 16 20 24
如果给两个循环条件都加上限定条件,第一个循环条件又将会依次执行第二个循环条件的每一个变量值
scala> for(i <- 1 to 5 if i%2 == 0; j<- 2 to 6 if j%2 == 0 )print(i*j + " ") 4 8 12 8 16 24
- 利用yield返回一个新集合
scala> var v1 = for(i <- 1 to 5) yield i v1: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5) scala> println(v1) Vector(1, 2, 3, 4, 5) scala> println(v1(1)) 2
5、while循环
- 简单的while语句
scala> var i = 0 i: Int = 0 scala> while(i <= 5){ | i += 1; | print(i + " ") | } 1 2 3 4 5 6
- break语句的特殊实现
在Scala中没有break和continue两个关键字,continue可以控制是否要向下执行,而break在Scala从有特殊的实现
import scala.util.control.Breaks._ object test { def main(args: Array[String]):Unit = { var i = 0 breakable{ while (true){ i += 1 println("i= " + i) if(i == 5){ break } } println("执行while以外的语句 ") } } }
这段代码首先import了scala.util.control.Breaks._,这样就可以使用breakable和break语句了,这里的while语句被breakable语句块包围了,这样在需要break的地方调用braek方法,所以其实这里的break并不是关键字而是一个方法,这个方法会抛出异常从而中断循环。下面是运行是的输出:
我把输出的日志级别修改为WARN所以这里只有输出,不过已经可以看到这里的循环已经结束了,而且没有执行 println("执行while以外的语句 ") 这条语句,说明break将跳出整个breakable语句块
6、异常控制
- 抛出异常
throw new IllegalArgumentException
- 捕获异常
try { ...... }catch { case ...... case ...... }finally { ...... } }
- 文件读取的例子
try { val file = Source.fromFile("D://3.txt") val lines = file.getLines() for(content <- lines){ println(content) } }catch { case ex: FileNotFoundException => println("文件不存在" + ex) case ex: Exception => println(ex) }finally { println("这里通常用来释放资源") } }
文件不存在时的输出:
文件不存在java.io.FileNotFoundException: D:3.txt (系统找不到指定的文件。)
这里通常用来释放资源