Qué significa estática en Java

Rashmi Patidar 12 octubre 2023
  1. Uso de la palabra clave static junto con variables miembro en Java
  2. Uso de la palabra clave static junto con funciones miembro en Java
  3. Uso de la palabra clave static en un bloque en Java
Qué significa estática en Java

En el lenguaje Java, static es una palabra clave que puede usarse en varios lugares. La palabra clave static se usa junto con una variable miembro, funciones miembro, bloques y clases anidadas. La aplicación de palabras clave estáticas es donde no queremos crear una nueva instancia cada vez. En cambio, lo usamos en lugares donde la copia única se comparte dentro de la clase. Las variables estáticas se almacenan en la memoria dinámica, que es un tipo de memoria permanente.

Uso de la palabra clave static junto con variables miembro en Java

El bloque de código explica en qué se diferencia la variable estática de las variables no estáticas.

public class StaticVariableUsage {
  public static void main(String[] args) {
    InnerClass in = new InnerClass();
    InnerClass in1 = new InnerClass();

    InnerClass2 in2 = new InnerClass2();
    InnerClass2 in3 = new InnerClass2();
  }

  static class InnerClass {
    static int var4 = 0;
    InnerClass() {
      var4++;
      System.out.println("static variable : " + var4);
    }
  }

  static class InnerClass2 {
    int var5 = 0;
    InnerClass2() {
      var5++;
      System.out.println("non-static variable : " + var5);
    }
  }
}

En el bloque de código anterior, hay una clase pública denominada clase StaticVariableUsage. Tiene un método estático y dos clases internas. La clase interna llamada InnerClass tiene una variable entera estática var4 y se inicia con cero. La clase tiene un constructor que incrementa la variable entera estática e imprime su valor.

Otra clase interna tiene el nombre InnerClass2 y contiene una variable no estática var5. Esta clase también tiene un constructor que incrementa la variable no estática e imprime su valor.

Pasando al método main, aquí, InnerClass e InnerClass2 se instancian dos veces. El análisis se puede derivar cuando ocurre la llamada al constructor y se crea una instancia de un objeto con una nueva palabra clave.

Como dice la salida, la variable estática se inicia y se conserva. El valor se incrementa por primera vez e imprime el valor como 1. La próxima vez, cuando creamos otra instancia, se vuelve a llamar al constructor. Pero la variable estática no se reinicializa con cero nuevamente. En cambio, el valor almacenado previamente se incrementa, por lo tanto, la variable estática tiene un valor dos.

De manera similar, cuando se crea una instancia de InnerClass2, cada vez que la variable no estática se inicializa al valor 0. Por lo tanto, imprime el valor como 1 en la salida en ambas ocasiones.

static variable : 1
static variable : 2
non-static variable : 1
non-static variable : 1

Uso de la palabra clave static junto con funciones miembro en Java

Tenemos una clase externa llamada clase StaticFunctionUsage que contiene la otra clase interna en la siguiente clase. InnerClass tiene una función estática. Y otra clase interna llamada InnerClass1 tiene un método no estático.

Ahora, pasando al método main, se ve que la función estática es directamente accesible con el nombre de la clase. No tenemos que instanciar el objeto InnerClass. De manera similar, cuando intentamos acceder a la función no estática function1 con el nombre de la clase, se completa un error en tiempo de compilación. Si queremos acceder a la función, es necesario crear la instancia de la clase, que creamos con el nombre de variable in. El uso de la variable es para llamar a function1 y es una declaración válida.

public class StaticFunctionUsage {
  public static void main(String[] args) {
    InnerClass.function();
    // InnerClass1.function1();
    InnerClass1 in = new InnerClass1();
    in.function1();
  }

  static class InnerClass {
    static void function() {
      System.out.println("In the static function");
    }
  }

  static class InnerClass1 {
    void function1() {
      System.out.println("In the non-static function");
    }
  }
}

La salida del bloque de código anterior es la siguiente.

In the static function
In the non-static function

Uso de la palabra clave static en un bloque en Java

El uso de bloques estáticos es para inicializar variables estáticas. La ejecución del programa comienza con el método main. Si un bloque estático está presente dentro de una clase, se ejecuta antes de la ejecución del método main.

A continuación se muestra el código que explica el bloque estático.

public class StaticBlock {
  static {
    System.out.println("In the static block");
  }

  public static void main(String[] args) {
    System.out.println("In the main method");
  }
}

La salida del código es la siguiente. Como podemos ver, la instrucción en el bloque estático se ejecuta en primer lugar.

In the static block
In the main method
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn