Clase estática en Java

Rashmi Patidar 12 octubre 2023
Clase estática en Java

En el lenguaje Java, no podemos crear una clase externa como una clase estática, pero existe el privilegio de crear una clase interna anidada como una clase estática. Las propiedades de una clase estática son las siguientes.

Una clase interna estática nunca puede acceder a un miembro no estático de la clase externa.

Una clase interna estática no necesita ninguna referencia de clase externa para acceder a las variables miembro.

La clase estática nunca se puede instanciar. Por lo tanto, los métodos son directamente accesibles por el nombre de la clase.

A continuación se muestra el código que demuestra las dos líneas anteriores.

package static_class;

public class StaticInnerClass {
  static int i = 1;
  int j = 9;

  public static void main(String[] args) {
    StaticInnerClass s = new StaticInnerClass();
    // s.InnerClass.printNum();
    InnerClass.printNum();
  }

  public static class InnerClass {
    public static void printNum() {
      System.out.println(i);
      // System.out.println(j);
    }
  }
}

En el código anterior, hemos creado una clase externa con el nombre StaticInnerClass. Esta clase tiene un campo estático, un campo no estático, un método estático y una clase interna estática. En el método main estático, hemos creado una instancia de una clase externa llamada objeto s. Cuando intentamos acceder al método printNum() de la clase interna con un objeto de clase externa, es decir, s.InnerClass.printNum(); IDE da un error en tiempo de compilación, que indica que la clase interna estática no necesita ninguna referencia del objeto de referencia de la clase externa para acceder a los métodos de la clase interna. Por lo tanto, podemos acceder directamente a los métodos de la clase interna por nombre de clase.

Ahora, cuando vemos la definición del método printNum(). Tiene dos declaraciones impresas. Primero imprime el campo estático de la clase externa, y segundo intenta imprimir la variable no estática de la misma. La declaración System.out.println(i); es válido, lo que significa que solo se puede acceder a miembros estáticos desde el contexto estático. Pero mirando la segunda declaración, System.out.println(j); no es válido, ya que nunca se puede acceder a miembros no estáticos desde el contexto estático.

En la clase Java, no hay posibilidad de crear una clase externa static. Pero podemos imitar el comportamiento utilizando algunas palabras clave definidas.

El uso de la palabra clave final es hacer que la clase sea final. Esta palabra clave prohíbe que la clase se extienda más. La razón es que no sirve de nada la extensión de una clase estática.

Utilice la palabra clave private para hacer que el constructor sea privado, ya que esto evita la creación de instancias de una clase estática. Como dice la propiedad de la clase estática, nunca se puede instanciar.

Utilice la palabra clave static con variables miembro y métodos miembro. Dado que no se crea ningún objeto, nunca se puede acceder a funciones y campos miembros no estáticos.

A continuación se muestra una clase estática definida y su uso se encuentra en la creación de la clase Utility, donde no se requiere la creación de objetos de esta clase.

package static_class;

public final class StaticClass {
  private static int a = 1;

  private StaticClass() {
    System.out.println("Cannot be instantiated");
  }

  public static void printNum() {
    System.out.println(a);
  }
}
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

Artículo relacionado - Java Class