Scala中,所有的值都是类对象,而所有的类,包括值类型,都最终继承一个统一的根类型Any。统一类型,是Scala的又一大特点。更特别的是,Scala中还定义了几个底层类(Bottom Class),比如Null和Nothing。
1、Null
Null是所有引用类型的子类型,而Nothing是所有类型的子类型。Null类只有一个实例对象null,类似于Java中的null引用。null可以赋值给任意引用类型,但是不能赋值给值类型。
null是一个对象,是一个Null类型的对象,可以赋值给任意引用类型,但是不能赋值给值类型
2、Nothing
Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。
3、Unit
Unit类型用来标识过程,也就是没有明确返回值的函数。 由此可见,Unit类似于Java里的void。Unit只有一个实例 (),这个实例也没有实质的意义。
unit ->可以类比理解为void
def play()={
()
}
unit类型的实例化对象就是()括号,括号它是一个对象,可以类比理解为void,是的,理解的时候,可以这么理解,但是严谨的说Unit 不是void,你不能太认真,unit和void差太多了,Unit类型只有一个实例化对象,就是()括号
Null 只有一个实例化对象,就是小写的null,Scala里面一切皆对象
之所以,设计出大写Null和小写null,也是为了符合,“Scala里面一切皆对象”的这句话的描述,因为编程语言,你在定义它的时候,就是在定义这个编程语言的世界观的,你的世界观是一定要有一个根基的,一切的事物都要符合你的这个根基的,不然你的这个世界观就崩塌了,我们要有一个根本的假设,也就是说,所有的东西都要符合这个根本假设,有些东西是为了符合而符合的,就像数学里面的0的阶乘是,1的零次方,这都是规定出来的,为了符合其他的数学逻辑,而规定的,所以Scala里面也是,Null的实例化对象是null
4、类型结构图