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 (系统找不到指定的文件。)
    这里通常用来释放资源
  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8430044.html
Copyright © 2011-2022 走看看