Cosa significa statico in Java

Rashmi Patidar 12 ottobre 2023
  1. Uso della parola chiave static insieme alle variabili membro in Java
  2. Uso della parola chiave static insieme alle funzioni membro in Java
  3. Uso della parola chiave static in un blocco in Java
Cosa significa statico in Java

Nel linguaggio Java, static è una parola chiave che può avere il suo utilizzo in vari luoghi. La parola chiave static viene utilizzata insieme a una variabile membro, funzioni membro, blocchi e classi nidificate. L’applicazione di parole chiave statiche è ovunque non vogliamo creare una nuova istanza ogni volta. Invece, lo usiamo nei luoghi in cui la singola copia viene condivisa all’interno della classe. Le variabili statiche vengono archiviate nella memoria heap, che è un tipo di memoria permanente.

Uso della parola chiave static insieme alle variabili membro in Java

Il blocco di codice spiega in che modo la variabile statica è diversa dalle variabili non statiche.

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

Nel blocco di codice sopra, c’è una classe pubblica chiamata la classe StaticVariableUsage. Ha un metodo statico e due classi interne. La classe interna denominata InnerClass ha una variabile intera statica var4 e viene iniziata con zero. La classe ha un costruttore che incrementa la variabile intera statica e ne stampa il valore.

Un’altra classe interna ha il nome InnerClass2 e contiene una variabile non statica var5. Questa classe ha anche un costruttore che incrementa la variabile non statica e ne stampa il valore.

Passando al metodo main, qui, InnerClass e InnerClass2 vengono istanziati due volte. L’analisi può essere derivata quando si verifica la chiamata del costruttore, un oggetto viene istanziato con una nuova parola chiave.

Come dice l’output, la variabile statica viene avviata e viene preservata. Il valore viene incrementato per la prima volta e stampa il valore come 1. La prossima volta, quando creiamo un’altra istanza, il costruttore viene chiamato di nuovo. Ma la variabile statica non viene nuovamente inizializzata con zero. Invece, il valore precedentemente memorizzato viene incrementato, quindi, rendendo il valore della variabile statica due.

Allo stesso modo, quando viene creata un’istanza di InnerClass2, ogni volta che la variabile non statica viene inizializzata al valore 0. Quindi stampa il valore come 1 in output entrambe le volte.

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

Uso della parola chiave static insieme alle funzioni membro in Java

Abbiamo una classe esterna denominata classe StaticFunctionUsage che contiene l’altra classe interna nella classe sottostante. InnerClass ha una funzione statica. E un’altra classe interna denominata InnerClass1 ha un metodo non statico.

Passando ora al metodo main, si vede che la funzione statica è direttamente accessibile con il nome della classe. Non è necessario istanziare l’oggetto InnerClass. Allo stesso modo, quando proviamo ad accedere alla funzione non statica function1 con il nome della classe, viene popolato un errore in fase di compilazione. Se vogliamo accedere alla funzione, è necessario creare l’istanza della classe, che abbiamo creato con il nome variabile in. L’uso della variabile è chiamare function1 ed è un’istruzione valida.

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

L’output del blocco di codice sopra è il seguente.

In the static function
In the non-static function

Uso della parola chiave static in un blocco in Java

L’uso dei blocchi statici consiste nell’inizializzare le variabili statiche. L’esecuzione del programma inizia con il metodo main. Se un blocco statico è presente all’interno di una classe, viene eseguito prima dell’esecuzione del metodo principale.

Di seguito è riportato il codice che spiega il blocco statico.

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

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

L’output del codice è il seguente. Come possiamo vedere, l’istruzione nel blocco statico viene eseguita per prima.

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