1.总层次结构
Any是所有类的父类
2.值类型 和 引用类型
左侧的AnyVal 类下的值类型 都是会被放到 寄存器中
右侧的AnyRef 都是引用类型, 对象被实例化后 会被放到堆中
右侧 所有引用类型的子类 Null 类似Java中的Null, Null 并不能实例化,只是用来处理 异常和错误的。 平时不建议使用Nul 改用Option
3.option
3.1 Option是一个抽象类,它有一个子类 叫Some
3.2 使用场景:
在 一些方法中 最后要返回一个值, 但这个返回值有时为空,有时 不为空,那么就可以将这个 返回值 类型设置为Option。
Option中有 Some子类用来封装 有值的返回; 用None来 处理没有值的返回
eg:
case class Dog(val name:String, val age:Int){ //使用case 自动生成伴生对象
}
val myPet = Map("大黄"->Dog("大黄",3),"四眼"->Dog("四眼",2))
println(myPet.get("四眼"))
输出:
这里 Map的get方法默认 返回的就是 Option, 有值用Some 返回, 没值用None
eg2:
case class Dog(val dname:String){
val price_Dic = Map("柯基"->1000,"金毛"->"1100","边牧"->1500)
//从价格字典中查询 狗狗对应价格
def queryPrice(): Option[Any] ={
787878
return price_Dic.get(dname)
}
}
val d1 = Dog("金毛").queryPrice()
println(" return is",d1)
println("金毛 price is",d1.get) //some 的get 方法会返回 其包装的值
val d2 =Dog("柴犬").queryPrice() //价格字典中没有柴犬价格
println(" return is",d2) //这里会返回None
println("柴犬’s price is ", d2.getOrElse("Option retrun None")) //这里使用 getOrElse 方法来避免, 对None调用 get方法而报错, 且当get取不到值时 返回括号中定义的值
输出 :