Pregunta

Considerar Clase Java solo con campos estáticos y ningún constructor:

public class OnlyStatic {
   static O1 o1 = new o1();
   static O2 o2 = new o2();

   public static int compute(int whatever) {
       return o1.foo+o2.bar+whatever;
   }
}

En una clase diferente, el método compute se usa, ya sea por static import:

static import OnlyStatic.compute
int a = OnlyStatic.compute(3);

O directamente, suponiendo que la persona que llama está en el mismo paquete:

int a = OnlyStatic.compute(3);

¿Cuándo se inicializan O1 y O2? En la importación, o cuando compute() se llama por primera vez?

¿Fue útil?

Solución

Los objetos o1 y o2 no están disponibles para su static contexto sin hacerlos static además.

JVMS Establece que

Cualquier inicializadores estáticos declarados en una clase se ejecutan cuando la clase se inicializa

Más lejos

Un tipo de clase o interfaz T se inicializará inmediatamente antes de la primera ocurrencia de cualquiera de los siguientes:

  • T es una clase y una instancia de T es creado.
  • T es una clase y un método estático declarado por T se invoca.
  • Un campo estático declarado por T es asignado.
  • Un campo estático declarado por T se usa y el campo no es una variable constante (§4.12.4).
  • T es una clase de nivel superior y una declaración de afirmación (§14.10) anidada léxicamente dentro de T es ejecutado.

Entonces, en su caso, cuando el método estático compute() es primero ejecutado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top