美文网首页
scala基础

scala基础

作者: 初夏时的猫 | 来源:发表于2021-12-11 00:26 被阅读0次

    一些基础

    变量和常量
    ( 1)声明变量时,类型可以省略,编译器自动推导,即类型推导
    ( 2)类型确定后,就不能修改,说明 Scala 是强数据类型语言。
    ( 3)变量声明时,必须要有初始值
    ( 4)在声明/定义一个变量时,可以使用 var 或者 val 来修饰, var 修饰的变量可改变,
    val 修饰的变量不可改。
    (5) var 修饰的对象引用可以改变, val 修饰的对象则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)
    注:反引号包括的任意字符串都可以作为变量名称,关键字也可以

    数据类型

    1.java数据类型:Java有基本数据类型,而且基本数据类型不是真正意义的对象,即使后面产生了基本数据类型的包装类,但仍然存在基本数据类型,所以Java语言并不是真正意思的面向对象。
    注:java中基本类型和引用类型没有共同的祖先。

    2.scala数据类型:

    1)一切数据皆对象,都是Any的子类
    2)scala数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象。
    3)scala中StringOps是对Java中的String的增强
    4)Unit对应java中的void,但unit是一个数据类型,只有一个对象就是(),而void是一个关键字
    5)Null是一个类型,只有一个对象就是null。它是所有引用类型的子类
    6)Nothing:所有数据类型的子类,主要用在一个函数没有明确返回值时使用,因为这样可以把抛出的返回值返回给任何变量或者函数。

       def test4() : Nothing = {
          throw new Exception
        }
        test4()
    

    隐式类型转换

    1.自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
    2.把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换
    3.( byte, short)和 char 之间不会相互自动转换。

        def test5(double: Double): Unit ={
          println(double)
        }
        val a:Char = 'A'
        test5(a)
    
    图片.png

    强制类型转换

    var num : Int = 2.7.toInt
    注:var n5:Int = "12.6".toInt 会出现 NumberFormatException 异常

    流程语句

    if

    val v:Any = if(true){
      "hehe"
    }else{
      "haha"
    }
    

    for

    scala为for提供很多特性,这些for循环特性被称为for推导式或for表达式

    def forDemo3(): Unit ={
      //1,3,5,7,9
      //by表示步长
      for (i<- 1 to 10 by 2){
        print(i)
      }
    }
    def forDemo4(): Unit ={
      for{
        i<- 1 to 3
        j<- 4 to 4+i
      }{
        println(i,j)
      }
      //等价于
      for (i<-1 to 3){
        for (j<-4 to 4+i){
          println(i,j)
        }
      }
    }
    
    def forDemo5(): Unit ={
      for (i <- 1 to 10 reverse){
        println(i)
      }
    }
    def forDemo6(): Unit ={
      val ints: Any = for (i<- 1 to 10) yield{
        i*2
      }
      println(ints)
    }
    

    break

      def breadDemo1(): Unit ={
       try{
         for (i<- 1 to 10){
           println(i)
           if (i == 5){
             throw new StackOverflowError
           }
         }
       }catch {
         case e => println(e)
       }
        println("结束结束")
      }
      def breakDemo2: Unit ={
        //breakable
        Breaks.breakable(
          for (elem <- 1 to 10){
            println(elem)
            if (elem==5){
              //break
              Breaks.break
            }
          }
        )
        println("循环结束")
      }
    

    相关文章

      网友评论

          本文标题:scala基础

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