Classe statica in Java

Rashmi Patidar 12 ottobre 2023
Classe statica in Java

Nel linguaggio Java, non possiamo creare una classe esterna come classe statica, ma esiste il privilegio di creare una classe interna annidata come classe statica. Le proprietà di una classe statica sono le seguenti.

Una classe interna statica non può mai accedere a un membro non statico della classe esterna.

Una classe interna statica non necessita di alcun riferimento alla classe esterna per accedere alle variabili membro.

La classe statica non può mai essere istanziata. Quindi, i metodi sono direttamente accessibili dal nome della classe.

Di seguito è riportato il codice che illustra le due righe precedenti.

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);
    }
  }
}

Nel codice sopra, abbiamo creato una classe esterna con il nome StaticInnerClass. Questa classe ha un campo statico, un campo non statico, un metodo statico e una classe interna statica. Nel metodo principale statico, abbiamo creato un’istanza di una classe esterna denominata oggetto s. Quando proviamo ad accedere al metodo printNum() della classe interna con un oggetto di classe esterno, ovvero s.InnerClass.printNum(); IDE fornisce un errore in fase di compilazione, che afferma che la classe interna statica non necessita di alcun riferimento all’oggetto di riferimento della classe esterna per accedere ai metodi della classe interna. Quindi, possiamo accedere direttamente ai metodi della classe interna in base al nome della classe.

Ora, quando vediamo la definizione del metodo printNum(). Ha due dichiarazioni di stampa. Primo stampa il campo statico della classe esterna e secondo prova a stampare la variabile non statica della stessa. L’istruzione System.out.println(i); è valido, il che significa che è possibile accedere solo ai membri statici dal contesto statico. Ma guardando la seconda affermazione, System.out.println(j); non è valido, poiché non è mai possibile accedere a membri non statici dal contesto statico.

Nella classe Java, non è possibile creare una classe static di una classe esterna. Ma possiamo imitare il comportamento usando alcune parole chiave definite.

L’uso della parola chiave final è quello di rendere la classe finale. Questa parola chiave impedisce alla classe di estendersi ulteriormente. Il motivo è che non serve l’estensione di una classe statica.

Utilizzare la parola chiave private per rendere privato il costruttore poiché ciò impedisce l’istanza di una classe statica. Come dice la proprietà della classe statica, non si può mai istanziarla.

Usa la parola chiave static con le variabili membro e i metodi membro. Poiché non viene creato alcun oggetto, non è mai possibile accedere a campi e funzioni membro non statici.

Di seguito è definita una classe statica e il suo utilizzo si trova nel creare la classe Utility, in cui non è richiesta la creazione di oggetti di questa classe.

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

Articolo correlato - Java Class