zoukankan      html  css  js  c++  java
  • 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 (系统找不到指定的文件。)
    这里通常用来释放资源
  • 相关阅读:
    软件测试经典面试题汇总测试…(转载)
    loadrunner录制时弹出invalid application path
    【转】性能测试知多少:性能分析与…(转载)
    loadrunner小知识累积(转载)
    selenium定位方法总结
    [testng]Cannot find class in classpath
    java工程名前有红色感叹号
    jenkins slave节点问题总结
    scrapy爬虫框架
    Python监听鼠标键盘事件
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8430044.html
Copyright © 2011-2022 走看看