Un initialise statique en Java est un bloc de code entouré d'accolades et précédé du mot-clé static. Ce bloc s'exécute une seule fois lors du chargement de la classe dans la JVM, avant la création de tout instance de cette classe et avant l'appel de toute méthode statique. Son principal objectif est d'exécuter une initialisation complexe des variables statiques.
public class Example { static int staticValue; static { staticValue = 10; // Logique complexe d'initialisation System.out.println("Bloc statique d'initialisation exécuté"); } }
L'initialiseur statique est particulièrement utile lorsque la variable statique dépend d'autres ressources ou nécessite un traitement lors du chargement de la classe.
Question : "Dans quel ordre les blocs statiques et l'initialisation des variables statiques sont-ils exécutés en Java, si l'ordre de leur déclaration est différent dans la classe ?"
Réponse correcte : Toutes les variables statiques et les blocs sont initialisés dans l'ordre dans lequel ils sont déclarés dans le texte source de la classe (de haut en bas). Si une variable statique est utilisée dans un bloc statique situé au-dessus de sa définition, cela entraînera une erreur de compilation ou peut conduire à une valeur inattendue.
class Order { static { System.out.println(X); // valeur par défaut : 0 } static int X = 100; static { System.out.println(X); // 100 } }
Histoire
Dans un grand projet, un logger a été initialisé via un bloc statique, cependant, lorsque les déclarations de variables et les blocs statiques ont été inversés, la variable logger est restée non initialisée au moment de l'appel, ce qui a conduit à un NullPointerException lors de l'enregistrement lors du chargement de la classe.
Histoire
Lors du développement de l'outil JDBC, l'initialisation des pilotes a été effectuée dans un bloc statique. L'un des développeurs a déplacé la déclaration d'une variable String contenant le chemin en dessous du bloc statique, et le code a cessé de se connecter correctement à la base de données — le chemin était null.
Histoire
Dans un système distribué, des problèmes sont survenus lors du chargement des données de configuration : une partie de la logique a été réalisée dans des blocs statiques dans plusieurs classes avec des références mutuelles, ce qui a conduit à des initialisations cycliques et à un StackOverflowError lors du démarrage de l'application, en raison d'une mauvaise organisation des blocs statiques et des dépendances.