English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

¿Se inicializan las variables estáticas en el constructor predeterminado de Java?

Archivo estático/Las variables pertenecen a la clase, se cargarán en la memoria junto con la clase. Puede llamarlas sin crear un objeto (utilice el nombre de la clase como referencia). Solo hay una copia del campo estático en toda la clase, es decir, el valor del campo estático es el mismo en todos los objetos. Puede definir un campo estático utilizando la palabra clave static.

Ejemplo

public class Sample{
   static int num = 50;
   public void demo(){
      System.out.println("Valor de num en el método demo ");+ Sample.num);
   }
   public static void main(String args[]){
      System.out.println("Valor de num en el método main ");+ Sample.num);
      new Sample().demo();
   }
}

Resultado de salida

Valor de num en el método main 50
Valor de num en el método demo 50

Inicialización de variables estáticas

Si declara una variable estática en la clase y no las ha inicializado, se inicializarán con los valores por defecto del constructor por defecto, como si se usaran variables de instancia. El compilador usará los valores por defecto en el constructor por defecto.

Ejemplo

public class Sample{
   static int num;
   static String str;
   static float fl;
   static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

Resultado de salida

0
null
0.0
false

Inicialización de variables estáticas

Pero, si declara una variable de instancia estática y el compilador Java no la inicializará en el constructor por defecto, debe inicializar las variables estáticas y finales. Si no lo compila, se generará un error.

Ejemplo

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

Error de compilación

Sample.java:2: error: variable num not initialized in the default constructor
   final static int num;
^
Sample.java:3: error: variable str not initialized in the default constructor
   final static String str;
^
Sample.java:4: error: la variable fl no está inicializada en el constructor predeterminado
   final static float fl;
^
Sample.java:5: error: la variable bool no está inicializada en el constructor predeterminado
   final static boolean bool;
^
4 errores

No se puede asignar un valor a una variable final desde el constructor-

Ejemplo

public class Sample{
   final static int num;
   Sample(){
      num =;100;
   }
}

Resultado de salida

Sample.java:4: error: no se puede asignar un valor a la variable final num
   num =;100;
^
1 error

La única manera de inicializar variables estáticas finales, además de las declaraciones de inicialización, es a través de un bloque estático.

ABloque estáticoEs un bloque de código que utiliza la palabra clave estática. Por lo general, estos se utilizan para inicializar miembros estáticos. La JVM ejecuta los bloques estáticos antes del método main durante la carga de la clase.

Ejemplo

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   static{
      num =;100;
      str = "krishna";
      fl =;100.25f;
      bool = true;
   }
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

Resultado de salida

100
krishna
100.25
true
Te gustará