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

Scala对象的字段在每次使用时都会初始化,scala,initialization,Scala,Initialization,为什么每次使用对象的字段时都要初始化该字段?我的期望是Scala对象的实例,在我的示例中是P的实例,创建一次,因为它属于Scala对象。运行下面的代码看起来不是这样。每次调用P上的方法时,都会创建P的实例。 我找不到这种行为的任何解释。有人能帮忙吗?谢谢 object LoadingTest { println("create Object") def p = new P() def main(args: Array[String]) { p.printIt()

为什么每次使用对象的字段时都要初始化该字段?我的期望是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

这是因为您有
defp=newp()
。通过使用
def
定义此方法,您正在定义一个方法。因此,每次引用
p
,它都会调用该方法,从而实例化一个新的
p


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

感谢您的快速响应。我刚刚开始使用Scala,在Java开发人员眼中,像def p=new p()这样短的东西看起来根本不像一个方法。