一、Scala单例对象详解
在Scala中,没有像Java中的静态类、静态成员、静态方法,但提供了Object对象,类似Java中的静态类,它里面的所以成员(变量、方法)都是静态的
object University{
println("hello")
private var studentNo = 0
def newStudentNo = {
studentNo += 1
studentNo
}
}
object ObjectOps{
def main(args: Array[String]): Unit = {
println(University.newStudentNo)
println(University.newStudentNo)
}
}
输出:
hello
1
2
Java中,类里的静态模块当类被加载进来就会被执行
scala中,object里除了方法的代码,只有在第一次使用时才会被执行
object可作为静态方法、静态成员、公共变量的集合区 eg:一些配置属性初始化可放在object里
二、scala伴生对象代码实战
当类和对象有相同的名字时,我们称为其为对方的伴生类、伴生对象。
它们必须定义在同一个源文件中。
class University{
var id = University.newStudentNo //伴生类可以访问伴生对象的所有成员,包括其私有的成员.反过来亦如此。即伴生类和对象可相互访问其私有成员
//但object University并不是在class University的作用域内,所以newStudentNo前需要用University.
private var number = 0
def aClass(number : Int){ this.number += number}
}
object University{
private var studentNo = 0
private def newStudentNo = {
studentNo += 1
studentNo
}
}
当类class和对象object的名字相同时
如上,class University是object University的伴生类
object University是class University的伴生对象
伴生类可以访问伴生对象的所有成员,包括其私有的成员
val array = Array(1,2,3,4)
apply属于object Array
新构建一个类时,如果不写new 某个类,就是用伴生对象的apply()来构建的
参考资料来源于 DT大数据梦工厂 Scala零基础实战经典第10课 由王家林老师讲解