scala入门

一、Scala的var和val

package com.ccj.pxj.varOrval

object VarDemo {
  val girlFriend = "小白"
  def main(args: Array[String]): Unit = {
    var name: String = "smith"
    var age: Int = 10
    var gender: Char = '男'
    var isPass: Boolean = true
    var sal: Float = 8907.4f

    var num1 = 100 //就使用到了类型推断
    //在声明/定义一个变量时,可以使用var 或者 val 来修饰, var 修饰的变量可改变,val 修饰的变量不可改


    //因为val 是线程安全的,因此效率高,scala推荐使用
    //即能够使用val ,就不要使用var

    //var 是可以变的。
    var lover = "小红"
    lover = "小黑"
    //val 是不可变的变量
   // val girlFriend = "小白"
    println(girlFriend)

    //girlFriend = "小黄"

  }


}

val修饰的变量在编译后,等同于加上final
var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如: 自定义对象、数组、集合等等)
val 是线程安全的,因此效率高,scala推荐使用,能够使用val ,就不要使用var
在这里插入图片描述

二、数据类型

  1. Scala 与 Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型

  2. Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是AnyVal还是AnyRef 都是对象。
    在这里插入图片描述
    对上面的数据类型的关系图的说明

  3. Any是所有类的根类型,即所有类的父类(基类)

  4. 在scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是java的基本数据类型], AnyRef类型)

  5. 在AnyVal 虽然叫值类型,但是仍然是类(对象)

  6. 在scala中有两个特别的类型(Null ), 还有一个是Nothing

  7. Null 类型只有一个实例 null, 他是bottom class ,是AnyRef的子类.

Nothing 类型是所有类的子类, 它的价值是在于因为它是所有类的子类,就可以将Nothing类型的对象返回给任意的变量或者方法
6) 在scala中仍然遵守 低精度的数据自动的转成 高精度的数据类型。

7)在scala中,Unit 类型比较特殊,这个类型也只有一个实例 ()

三、强制类型转换

package com.ccj.pxj.varOrval

object DataTypeTrans {
  def main(args: Array[String]): Unit = {
    val b:Byte=10
    val c:Short=12
    val d:Char='a'
    val e:Double=1.025
    println(d.toInt)
    println(e.toInt)
    println(d+b+c)
  }

}
  1. 当进行数据的 从 大——>小,就需要使用到强制转换,注意有精度的损失 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

  2. Char类型可以保存 Int的常量值,但不能保存Int的变量值,需要强转

  3. Byte和Short类型在进行运算时,当做Int类型处理。

三、键盘输入

package com.ccj.pxj.varOrval

import scala.io.StdIn

object InputDemo {
  def main(args: Array[String]): Unit = {
    val name = StdIn.readLine()
    println("name=" + name)

  }

}

四、程序流程控制

package com.ccj.pxj.varOrval

object IfElseDemo {
  def main(args: Array[String]): Unit = {
    val year=2020
    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
      println(s"year= ${year} 是闰年")
    }
  }

}

五、循环

package com.ccj.pxj.varOrval

object ForDemo {
  def main(args: Array[String]): Unit = {
    for(r<- 1 to 30){
      println(r)
    }
  }

}
package com.ccj.pxj.varOrval

object UntilDemo {
  def main(args: Array[String]): Unit = {
    for(l<- 1 until(10)){
      println(l)
    }
    println("--------加守卫条件-----------------")
    for(k<-1 to 3 if k!=2){
      println(k)
    }
     var list=List("pxj","wfy","cdr","ccj","lzh")
    for (l<-list if ! l.contains("cdr")){
      println(l)
    }
  }

}
 println("-------------")
    for(i<-1 to 10;j<-1 to 5 ){
      println(s"i: ${i},j:${j}")
    }

说明:
to是前闭后闭
until是前闭后开
循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue

yield关键字使用

将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字,yield 可以写代码块.

package com.ccj.pxj.varOrval

object UntilDemo {
  def main(args: Array[String]): Unit = {
    for(l<- 1 until(10)){
      println(l)
    }
    println("-------------------------")
    for(k<-1 to 3 if k!=2){
      println(k)
    }
    println("--------------------------------------------------------------------------")
    var list=List("pxj","wfy","cdr","ccj","lzh")
    for (l<-list if ! l.contains("cdr")){
      println(l)
    }
    println("-------------")
    for(i<-1 to 10;j<-1 to 5 ){
      println(s"i: ${i},j:${j}")
    }
    println("------------------------------------------------------------------------------------")
    val seqs= for (i <- 1 to 10) yield i * 2
    println(seqs)
    val datas = for (i <- 1 to 100 if i % 2 == 1) yield {
      i
    }
    println(datas)
  }

}

作者:pxj(潘陈)
日期:2020-02-07 凌晨2:01:40
我不爱学习,不要刺激我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值