2012-06-11 7 views
5

Nếu tôi xác định đối tượng góiKhi nào các đối tượng gói được khởi tạo?

package com.something.else 

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

sau đó được nhập ở đâu đó trong mã nguồn.

import com.something.else.more 

Khi nào đối tượng này (và thành viên của nó) được khởi tạo/xây dựng?

Nói cách khác, điều gì xác định giá trị của more.time?
Được đánh giá khi chương trình bắt đầu lần đầu tiên? Hoặc lần đầu tiên nó được truy cập? Hoặc lần đầu tiên truy cập more?

+0

Dự đoán của tôi là khi trình nạp lớp tải lên lần đầu tiên, nhưng tôi không thể kiểm tra ngay bây giờ ... –

Trả lời

7

Thật dễ dàng để kiểm tra:

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) 
} 

cho:

1339394348495 
1339394349496 

Lần thứ hai là ~ 1000 ms sau, do đó, nó khi đối tượng gói được truy cập đầu tiên, vì nó sẽ là với bất kỳ đối tượng khác.