5 Stimmen

Wann werden Package-Objekte initialisiert?

Wenn ich ein Paketobjekt definiere

paket com.something.else

paketobjekt mehr {
    val zeit = System.currentTimeMillis
    // ... andere Sachen ...
}

das dann irgendwo im Quellcode importiert wird.

import com.something.else.more

Wann wird dieses Objekt (und seine Elemente) initialisiert/konstruiert?

Mit anderen Worten, was bestimmt den Wert von more.zeit?
Wird es ausgewertet, wenn das Programm zum ersten Mal gestartet wird? Oder wenn es zum ersten Mal abgerufen wird? Oder wenn more zum ersten Mal abgerufen wird?

7voto

Luigi Plinge Punkte 49666

Es ist einfach zu überprüfen:

package something

package object more {
  val time = System.currentTimeMillis
}

// in separater Datei:
package something.more

object Test extends App {
  val now = System.currentTimeMillis

  Thread.sleep(1000)

  println(now)
  println(time)
}

ergibt:

1339394348495
1339394349496

Die zweite Zeit ist ~1000 ms später, daher wird das Paketobjekt beim ersten Zugriff darauf ausgeführt, wie es auch bei jedem anderen Objekt der Fall wäre.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X