2012-06-11 9 views
5

私は、ソースコードのどこかにインポートされるパッケージオブジェクトパッケージオブジェクトはいつ初期化されますか?

package com.something.else 

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

を定義した場合。

このオブジェクト(およびそのメンバー)はいつ初期化/構築されますか?

つまり、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後〜ですので、パッケージオブジェクトに最初にアクセスしたときに、それはいずれかとなりますように、それは、です他のオブジェクト。

関連する問題