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

Cos'è una variabile finale vuota? Cos'è una variabile finale statica in Java?

Variabili statiche- Le variabili statiche sono dette anche variabili di classe. Puoi dichiarare una variabile statica utilizzando la parola chiave. Una volta dichiarata una variabile statica, in una classe ci sarà una sola copia, indipendentemente da quante istanze della classe vengano create.

public static int num = 39;

Variabile di istanza-Queste variabili appartengono all'istanza della classe (oggetto). Queste sono dichiarate all'interno della classe ma al di fuori dei metodi. Queste vengono inizializzate quando si istanzia la classe. Possono essere accedute da qualsiasi metodo, costruttore o blocco della classe specifica.

Devi utilizzare l'oggetto per accedere alle variabili di istanza. Ciò significa che per accedere alle variabili di istanza, devi creare un oggetto della classe e utilizzare quell'oggetto, devi accedere a queste variabili.

final-Dopo aver dichiarato una variabile final, non è possibile assegnargli un altro valore.

Variabile vuota

Le variabili final non inizializzate sono chiamate variabili final vuote. Come le variabili di istanza, le variabili final non vengono inizializzate con un valore predefinito. Pertanto,Devi inizializzare le variabili final dopo la loro dichiarazione.

Ma se provi a utilizzare una variabile vuota nel codice, viene generato un errore di compilazione.

Esempio

Nel seguente programma Java, la classe Student contiene due variabili final name e age, e non sono state inizializzate.

public class Student {
   public final String name;
   public final int age;
   public void display(){
      System.out.println("Nome dello Studente: " + this.name);
      System.out.println("Eta dell'Studente: " + this.age);
   }
   public static void main(String args[]) {
      new Student().display();
   }
}

Errore di compilazione

Quando si compila, il programma produce gli errori seguenti.

Student.java:3: errore: la variabile name non è inizializzata nel costruttore predefinito
   private final String name;
                        ^
Student.java:4: errore: la variabile age non è inizializzata nel costruttore predefinito
   private final int age;
                     ^
2 errori

Soluzione

Per risolvere questo problema, devi inizializzare le variabili final dichiarate con -

public class Student {
   public final String name;
   public final int age;
   public Student(){
      this.name = "Raju";
      this.age = 20;
   }
   public void display(){
      System.out.println("Nome dello Studente: " + this.name);
      System.out.println("Eta dell'Studente: " + this.age);
   }
   public static void main(String args[]) {
      new Student().display();
   }
}

risultato dell'output

Nome dello Studente: Raju
Età dello Studente: 20

Variabile statica vuota finale

Allo stesso modo, se dichiari una variabile statica finale senza inizializzarla, viene considerata come variabile statica finale.

Quando una variabile viene dichiarata come variabile statica e finale, può essere inizializzata solo nel blocco statico. Se tenti di inizializzarla in altri luoghi, il compilatore supporrà che tu stia cercando di assegnargli un valore e genererà un errore di compilazione -

Esempio

class Data{
   static final int num;
   Data(int i){
      num = i;
   }
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("valore della costante: " + Data.num);
   }
}

Errore di compilazione

ConstantsExample.java:4: errore: impossibile assegnare un valore alla variabile finale num
   num = i;
   ^
1 errore

Esempio

Di conseguenza, è necessario inizializzare la variabile statica finale nel blocco statico.

Per far funzionare correttamente il programma sopra, devi inizializzare la variabile statica finale nel blocco statico con -

class Data{
   static final int num;
   static{
      num = 1000;
   }
}
public class ConstantsExample {
   public static void main(String args[]) {
      System.out.println("valore della costante: " + Data.num);
   }
}

risultato dell'output

valore della costante: 1000
Ti potrebbe interessare