每次使用时都会初始化 Scala 对象的字段

Fields of Scala Object are initialised on every use

为什么对象的某个字段每次使用都要初始化?我的期望是 Scala 对象的实例,在我的示例中是 P 的实例,被创建一次,因为它属于 Scala 对象。 运行 下面的代码看起来好像不是这样。每次调用 P 上的方法时都会创建 P 的实例。 我找不到对此行为的任何解释。有人可以帮忙吗?谢谢

object LoadingTest {

  println("create Object")
   def p = new P()

  def main(args: Array[String]) {
    p.printIt()
    p.printIt()
  }
}

class P(){
  println("create P")
  def printIt()={
    println("print it")
  }

}

输出:

create Object
create P
print it
create P
print it

因为你有def p = new P()。通过使用 def 定义它,您定义了一个方法。因此,每次您引用 p 时,它都会调用该方法,从而实例化一个新的 P

您需要 val p = new P(),这将确保对象仅实例化一次,存储为 val,并在每次引用时重复使用。