2012-06-11 93 views
5

如果我定義了一個包對象包對象何時初始化?

package com.something.else 

package object more { 
    val time = System.currentTimeMillis 
    // ... other stuff ... 
} 

,然後將其在源代碼中的某處導入。

import com.something.else.more 

此對象(及其成員)何時初始化/構造?

換句話說,什麼決定了more.time的價值?
程序第一次啓動時進行評估嗎?或者第一次訪問它?還是第一次訪問more

+0

我的猜測是當類加載器第一次加載更多,但我現在無法檢查... –

回答

7

可以很容易地檢查:

package something 

package object more { 
    val time = System.currentTimeMillis 
} 

// in separate file: 
package something.more 

object Test extends App { 
    val now = System.currentTimeMillis 

    Thread.sleep(1000) 

    println(now) 
    println(time) 
} 

給出:

1339394348495 
1339394349496 

第二次是〜1000 ms後,所以這是當第一次訪問包對象,因爲這將是任何其他對象。