1. Introducción
En este tutorial, exploraremos el proceso de inicialización de variables estáticas. La máquina virtual Java (JVM) sigue este proceso durante la carga de clases.
2. Proceso de inicialización
En un nivel alto, la JVM realiza los siguientes pasos:

Primero, la clase se carga y se vincula. Luego, la fase de "inicialización" de este proceso procesa la inicialización de la variable estática. Finalmente, se llama al método principal asociado con la clase.
En la siguiente sección, veremos la inicialización de variables de clase.
3. Variable de clase
En Java, las variables estáticas también se denominan variables de clase. Es decir, pertenecen a una clase y no a una instancia en particular. Como resultado, la inicialización de la clase inicializará las variables estáticas.
Por el contrario, la instancia de una clase inicializará las variables de instancia (variables no estáticas). Todas las instancias de una clase comparten las variables estáticas de la clase.
Tomemos un ejemplo de la clase StaticVariableDemo :
public class StaticVariableDemo { public static int i; public static int j = 20; public StaticVariableDemo() {} }
Primero, la JVM crea un objeto Class para la clase StaticVariableDemo . A continuación, los inicializadores de campos estáticos asignan un valor predeterminado significativo a los campos estáticos. En nuestro ejemplo anterior, la variable de clase i se inicializa primero con un valor int predeterminado de cero .
El orden textual se aplica a los campos estáticos. En primer lugar, i se inicializará y luego j será inicializado. Después de eso , la clase y sus miembros estáticos serán visibles para otras clases.
4. Variable en un bloque estático
Tomemos otro ejemplo:
public class StaticVariableDemo { public static int z; static { z = 30; } public StaticVariableDemo() {} }
En este caso, la inicialización de la variable será secuencial. Por ejemplo, la JVM asigna inicialmente la variable z a un valor int predeterminado de 0. Luego, en el bloque estático , se cambia a 30.
5. Variable en una clase anidada estática
Finalmente, tomemos un ejemplo de la clase anidada dentro de la clase externa StaticVariableDemo :
public class StaticVariableDemo { public StaticVariableDemo() {} static class Nested { public static String nestedClassStaticVariable = "test"; } }
En este caso, la clase StaticVariableDemo carga la clase Nested . Inicializará la variable estática nestedClassStaticVariable .
6. Conclusión
En este breve artículo, hemos explicado brevemente la inicialización de variables estáticas. Para obtener más detalles, consulte la Especificación del lenguaje Java.
Como siempre, los fragmentos de código están disponibles en GitHub.