scala基础

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 (系统找不到指定的文件。)
这里通常用来释放资源

 

posted @ 2018-02-08 09:13  xxbbtt  阅读(187)  评论(0编辑  收藏  举报