Scala 趣题 9 循环依赖

这道题真是有意思!JVM能否意识到循环依赖呢?当遇到循环依赖时,JVM的处理策略是什么呢?

  object XY {
    object X {
      val value: Int = Y.value + 1
    }
    
    object Y {
      val value: Int = X.value + 1
    }
  }
  
  println(if (math.random > 0.5) XY.X.value else XY.Y.value)


























解释:

第一次access 一个object,会触发初始化对象的过程。

如果先调用了X, 初始化X的过程又触发了初始化Y,初始化Y的过程有要依赖X的值,此时VM意思到X正在被初始化,所以返回默认值给Y的初始化程序,Int的默认值为0


你可能感兴趣的:(scala)