Scala核心编程_第02章_变量

变量声明基本语法

var | val 变量名 [: 变量类型] = 变量值

注意事项:

  1. 声明变量时,类型可以省略(编译器自动推导,即类型推导)
  2. 类型确定后,就不能修改,说明Scala 是强数据类型语言.
  3. 在声明/定义一个变量时,可以使用var 或者 val 来修饰, var 修饰的变量可改变,val 修饰的变量不可改.val修饰的变量在编译后,等同于加上final,通过反编译看下底层代码。var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的(比如: 自定义对象、数组、集合等等) 
  4. 变量声明时,需要初始值。而java可以不给出初始值,系统自动赋予默认值

scala设计者为什么设计 var和val?

  1. 当需求是获取/创建一个对象后,只是读取或者修该对象的属性值,但是我们很少去改变这个对象本身这时,我们就可以使用val
  2. 因为val 没有线程安全问题,因此效率高。
object Vdemo {
  def main(args: Array[String]): Unit = {
    val dog= new Dog()
    dog.age=5
    dog.gender="male" //报错
  }
  
  class Dog{
    val gender="female"
    var age=5
  }

}

scala数据类型介绍

  1. Scala 与 Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型,scala这个地方和python很像,"一切皆对象"。
  2. Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是AnyVal还是AnyRef 都是对象。

Scala核心编程_第02章_变量

    1. 在scala中有一个根类型Any,他是所有类的父类。
    2. scala中一切皆为对象,分为两大类AnyVal值类型),AnyRcf(引用类型),他们都是Any子类
    3. Null 类型是scala的特别类型,它只有一个值null,他是bottomcalss,是所有AnyRef类型的子类
    4. Nothing类型也是bottomclass,他是所有类的子类,在开发中通常可以将Nothing类型的值返回给任意变量或者函数,这里抛出异常使用很多。