2012-06-11 5 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 мс позже, так что, когда объект пакета первый доступ, как это было бы с любым другой объект.

Смежные вопросы