Quando vengono inizializzate le variabili statiche in Java?

1. Introduzione

In questo tutorial, esploreremo il processo di inizializzazione della variabile statica. La Java Virtual Machine (JVM) segue questo processo durante il caricamento della classe.

2. Processo di inizializzazione

Ad alto livello, la JVM esegue i seguenti passaggi:

Innanzitutto, la classe viene caricata e collegata. Quindi, la fase di "inizializzazione" di questo processo elabora l'inizializzazione della variabile statica. Infine, viene chiamato il metodo principale associato alla classe.

Nella sezione successiva, esamineremo l'inizializzazione delle variabili di classe.

3. Variabile di classe

In Java, le variabili statiche sono anche chiamate variabili di classe. Cioè, appartengono a una classe e non a un'istanza particolare. Di conseguenza, l' inizializzazione della classe inizializzerà le variabili statiche.

Al contrario, l'istanza di una classe inizializzerà le variabili di istanza (variabili non statiche). Tutte le istanze di una classe condividono le variabili statiche della classe.

Facciamo un esempio della classe StaticVariableDemo :

public class StaticVariableDemo { public static int i; public static int j = 20; public StaticVariableDemo() {} }

Innanzitutto, la JVM crea un oggetto Class per la classe StaticVariableDemo . Successivamente, gli inizializzatori di campo statico assegnano un valore predefinito significativo ai campi statici. Nel nostro esempio precedente, la variabile di classe i viene prima inizializzata con un valore predefinito int pari a zero .

L'ordine testuale si applica ai campi statici. In primo luogo, i inizializza e quindi j verrà inizializzata. Dopodiché , la classe ei suoi membri statici saranno visibili alle altre classi.

4. Variabile in un blocco statico

Facciamo un altro esempio:

public class StaticVariableDemo { public static int z; static { z = 30; } public StaticVariableDemo() {} }

In questo caso, l'inizializzazione della variabile sarà in sequenza. Ad esempio, la JVM inizialmente assegna la variabile z a un valore int predefinito di 0. Quindi, nel blocco statico , viene modificato in 30.

5. Variabile in una classe annidata statica

Infine, prendiamo un esempio della classe nidificata all'interno della classe StaticVariableDemo esterna :

public class StaticVariableDemo { public StaticVariableDemo() {} static class Nested { public static String nestedClassStaticVariable = "test"; } }

In questo caso, la classe StaticVariableDemo carica la classe Nested . Inizializzerà la variabile statica nestedClassStaticVariable .

6. Conclusione

In questo breve articolo, abbiamo spiegato brevemente l'inizializzazione della variabile statica. Per ulteriori dettagli, controllare le specifiche del linguaggio Java.

Come sempre, gli snippet di codice sono disponibili su GitHub.