10.Scala单例对象、伴生对象实战详解

一、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课 由王家林老师讲解

你可能感兴趣的:(scala)