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

时间:2015-02-25 23:27:18

标签: scala initialization

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

1 个答案:

答案 0 :(得分:7)

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

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