美文网首页scala
scala:基础

scala:基础

作者: Frank_8942 | 来源:发表于2018-12-05 11:04 被阅读9次

    知识点:

    1. 数据类型
    2. 声明变量
    3. 算术操作符
    4. 块表达式
    5. if表达式
    6. 循环
    7. lazy
    8. 异常

    import scala.collection.immutable
    
    object Scala01_Base{
      def main(args: Array[String]): Unit = {
    
        /*
        数据类型:
        Scala和Java一样,有7种数值类型
        Byte、Char、Short、Int、Long、Float和Double(无包装类型)和一个Boolean类型
        与java不同的是,scala不刻意区分基本类型和引用类型,其数据类型都是类
        在scala中是不需要包装类型的,在基本类型和包装类型之间的转换是scala编译器的工作
         */
        val res1:Range.Inclusive = 1.to(10)  //int值1首先被转化成RichInt, 然后再调用 to() 方法
        val res2: Int = 9.9.toInt  //scala不需要像java一样强制类型转换,调用的是方法
    
    
        /*
        声明变量:
        1. 使用val定义的变量值是不可变的,相当于java里final修饰的变量,使用var定义的变量是可变的
        2. 在scala中,鼓励使用val定义变量,因为多数变量的值不需要改变
        3. 使用lazy定义变量后,只有在调用该变量时才会实例化这个变量的值,而且惰性变量只能是不可变变量
        4. 在scala中,系统会自动推断数据类型,不需要强制给出变量值的数据类型
        5. 可以同时声明多个变量值
         */
        val a = 1
        val b:Int = 2
        var c = 3
        lazy val d:String = "lazy"
        val e:String = null
        val (arr1,arr2) = ("a","b")
    
    
        /*
        算术操作符:
        scala中的算术操作符本质上就是方法,只不过是方法的简写罢了
        a + b   是   a.+(b)  的简写, 其中 + 是方法名称
         */
        1.+(2)  //简写为  1+2
        1.+=(1)  //就是java中的   1++
        "abc" toUpperCase  //方法的简写,并且如果方法中不需要传递参数,可以将()省略
    
    
        /*
        块表达式:
        在scala中,{ }块包含一系列表达式,块最后一个表达式的值就是块的值
        所以,块表达式就是经过一系列步骤计算后给出的一个值,这个值也可以是Unit
        注: 1. Unit类型等同于java中的void, 这个类型只有一个值, 写作()
            2. 每个表达式都会返回一个值, 比如赋值表达式 val a = 1 的返回值是 Unit类型,为 (), () 表示 无用值 的占位符, 就是 "无值" 的值;
         */
        val block1:Int = { println("我是块表达式的处理过程"); 1 + 2 }
        val block2:Unit = { val setValue = "赋值操作的返回值是Unit类型" }
    
    
    
        /*
        条件表达式:
        在scala中,条件语句是将多个{}块表达式组合起来的控制结构,所以if/else 表达式是有值的, 本质上就是块表达式是有值的;
        语法结构:   if (判断条件) {逻辑语句} else {逻辑语句}
         */
        val judge1:Int = if(0==0)1 else 2
        val judge2:Any = if(0==0) "a"  else 1  //所有数据类型的超类为 Any 类型
        val judge3:Unit = if(0==0) 1  //为了解决没有else的if语句, 在scala中引入 Unit 类型,写作 () ;不带else的 if 语句等同于: if (0==0) 1 else ()
        val judge4:Unit = if(0==0) 1 else ()
    
    
        /*
        循环:
        scala拥有与java相同的 while和do 循环,但是for 循环做了改变
        scala中没有提供break或continue关键字来控制循环,在scala中可以考虑使用Boolean变量来达到相同的目的
         */
        var flag = 11
        while ( flag > 0 ){
          println(s"while循环和java的写法相同 ${flag}")
        }
        for ( i <- 0 to flag if i%2 == 0){
          println(s"for循环的写法是<-,并且提供if守卫 ${i}")
        }
        val ints: immutable.IndexedSeq[Int] = for (j <- 0 to flag if j%2 == 0) yield j
        //如果for循环体以yield开始,则循环会构造出包含所有结果集的集合
        val loopFlag = 5
        for( i <- 0 to 10 if true){
          if (loopFlag > i){
            println("for循环的守卫和loopFlag变量都可以控制 循环的运行")
          }
        }
    
        /*
        lazy:
        当val被声明为lazy时, 此对象的初始化会被延迟创建,直到首次使用此对象时才被创建,被使用;
        懒值对于开销较大的初始化语句来说, 是有必要的;
        懒值并不是非没有额外开销,我们每次访问懒值时,都会一个方法被调用,而这个方法将会以线程安全的方式检查该值是否被初始化;
         */
        lazy val name = "我是一个开销较大的对象, 尽量使用lazy"
    
    
        /*
        异常:
        scala的异常和java的工作机制一样,通过try-catch的方式处理异常,如果不能恢复程序,则程序退出;
        不过,scala不需要声明函数或方式时可能会抛出的异常,所以scala的异常处理代码看起来更加的简洁;
         */
        try{
          println("try块 是程序正常执行的区域")
          1/0
        }catch {
          case ex:IOException => println("变量ex 就是 io异常对象")
          case _:Exception => println("程序一旦出错, 在catch区域进行修正")
        }finally {
          println("不论有没有发生异常, finally块 的代码都会执行, 用于释放资源")
        }
    
      }
    }
    

    相关文章

      网友评论

        本文标题:scala:基础

        本文链接:https://www.haomeiwen.com/subject/unjicqtx.html