De Ver métodos de variables estáticas de Java :
- Es una variable que pertenece a la clase y no al objeto (instancia)
- Las variables estáticas se inicializan solo una vez, al inicio de la ejecución. Estas variables se inicializarán primero, antes de la inicialización de cualquier variable de instancia.
- Una única copia para ser compartida por todas las instancias de la clase.
- Se puede acceder a una variable estática directamente por el nombre de la clase y no necesita ningún objeto.
Las variables de instancia y clase (estáticas) se inicializan automáticamente a los valores predeterminados estándar si no las inicializa intencionalmente. Aunque las variables locales no se inicializan automáticamente, no puede compilar un programa que no pueda inicializar una variable local o asignar un valor a esa variable local antes de que se utilice.
Lo que el compilador realmente hace es producir internamente una rutina de inicialización de una sola clase que combina todos los inicializadores de variables estáticas y todos los bloques de código de inicializadores estáticos, en el orden en que aparecen en la declaración de clase. Este único procedimiento de inicialización se ejecuta automáticamente, una sola vez, cuando la clase se carga por primera vez.
En caso de clases internas , no pueden tener campos estáticos
Una clase interna es una clase anidada que no se declara explícita o implícitamente static
.
...
Las clases internas no pueden declarar inicializadores estáticos (§8.7) o interfaces miembro ...
Las clases internas no pueden declarar miembros estáticos, a menos que sean variables constantes ...
Consulte JLS 8.1.3 Clases internas e instancias adjuntas
final
Los campos en Java se pueden inicializar por separado de su lugar de declaración, sin embargo, no puede ser aplicable a los static final
campos. Vea el ejemplo a continuación.
final class Demo
{
private final int x;
private static final int z;
static
{
z = 10;
}
public Demo(int x)
{
this.x=x;
}
}
Esto se debe a que solo hay una copia de las static
variables asociadas con el tipo, en lugar de una asociada con cada instancia del tipo, como ocurre con las variables de instancia y si intentamos inicializar el z
tipo static final
dentro del constructor, intentará reinicializar el static final
campo de tipo. z
porque el constructor se ejecuta en cada instanciación de la clase que no debe ocurrir en final
campos estáticos .