On peut écrire des blocs d'initialisations qui seront exécutés au chargement de la classe en mémoire (blocs d'initialisation statique)
ou à la création d'une instance de la classe (blocs d'initialisation).
-
Blocs d'initialisation statiques :
Un bloc d'initialisation statique est un bloc de code placés entre des accolades "{}", avec l'accolade ouvrante précédée par le mot clé static
.
Une classe peut avoir plusieurs blocs d'initialisation statiques, et ils peuvent apparaître n'importe où dans le corps de la classe.
Au chargement de la classe, les blocs d'initialisation statiques seront exécutés un après l'autre selon leurs ordres d'apparition dans le code de la classe.
En fait, le compilateur assemble le code de tous les blocs d'initialisation statiques (en respectant leurs ordres d'apparition dans le code de la classe) dans une seule "spéciale" méthode qui sera invoquée au chargement de la classe.
Le code des blocs d'initialisation statiques est exécuté une seule fois (au chargement de la classe) et ne sera pas exécuté par la suite à la création des instances de la classe.
-
Blocs d'initialisation (non-statiques) :
Un bloc d'initialisation est un bloc de code placés entre des accolades "{}".
Une classe peut avoir plusieurs blocs d'initialisation, et ils peuvent apparaître n'importe où dans le corps de la classe.
À la création d'une instance de la classe, les blocs d'initialisation seront exécutés un après l'autre selon leurs ordres d'apparition dans le code de la classe.
En fait, le compilateur copie le code de tous les blocs d'initialisation (en respectant leurs ordres d'apparition dans le code de la classe) au début du code de chaque constructeur
à condition que celui ceci ne fait pas appel à un autre constructeur en utilisant le mot clé this
.
Exemple:
Résultat d'exécution du code :
Les blocs d'initialisation (comme c'est le cas pour les constructeurs) ne sont pas héritables.
-
Blocs d'initialisation statiques :
Le code des blocs d'initialisation statiques de la superclasse est toujours exécuté en premier
puis le code des blocs d'initialisation statiques de la sous-classe est exécuté ensuite.
-
Blocs d'initialisation (non-statiques) :
Puisque le code des blocs d'initialisation est copié dans chaque constructeur, l'exécution des blocs dépond de l'exécution des constructeurs.
Exemple:
Résultat d'exécution du code :