¿Cuándo se inicializan los campos estáticos? Si nunca creo una instancia de una clase, pero accedo a un campo estático, ¿TODOS los bloques estáticos y los métodos estáticos privados utilizados para instanciar los campos estáticos privados se llaman (en orden) en ese instante?
¿Qué pasa si llamo a un método estático? ¿También ejecuta todos los bloques estáticos? ¿Antes del método?
java
static
initialization
Tony R
fuente
fuente

Respuestas:
La inicialización estática de una clase normalmente ocurre inmediatamente antes de la primera vez que ocurre uno de los siguientes eventos:
para una clase de nivel superior, se ejecuta una declaración de aserción anidada léxicamente dentro de la clase1 .Consulte JLS 12.4.1 .
También es posible forzar la inicialización de una clase (si aún no se ha inicializado) usando
Class.forName(fqn, true, classLoader)o la forma cortaClass.forName(fqn)1 - La viñeta final estaba presente en el JLS para Java 6 a Java 8, pero aparentemente fue un error en la especificación. Finalmente se corrigió en Java 9 JLS: ver fuente .
fuente
Strings están sustituidos y no se hace referencia. Si hace referencia a unaclass Other { public static final int VAL = 10; }de alguna claseMyClass { private int = Other.VAL; }, la claseOtherno se cargará. En cambio, el compilador simplemente sustituirá el campo final en el momento de la compilación.Stringvariables 'estáticas finales' , solo las inicializadas por una expresión constante.staticmientras este es un caso común.Los campos estáticos se inicializan durante la "fase" de inicialización de la carga de clases (carga, vinculación e inicialización) que incluye inicializadores estáticos e inicializaciones de sus campos estáticos. Los inicializadores estáticos se ejecutan en un orden textual como se define en la clase.
Considere el ejemplo:
Test.b se imprime
nullporque cuandosayHellose llamó en el ámbito estático, la variable estáticaano se inicializó.fuente
Sí, todos los inicializadores estáticos se ejecutan antes de acceder a la clase por primera vez. Si fuera de otra manera, lo llamaría error.
fuente