J'ai cherché pendant longtemps mais je n'ai pas trouvé le temps d'exécution du bloc. Plus tard, j'ai utilisé javap -c pour vérifier le fichier de classe et j'ai découvert que le bloc avait été lancé dans le constructeur et que la méthode <init> La superclasse invocationspecial y était également, mais devant le bloc. Cela explique votre problème.
Tout d'abord, après avoir utilisé la commande javac pour compiler une classe Java, le bloc de code d'initialisation de la classe Java disparaîtra - le code dans le bloc de code d'initialisation sera "restauré" à chaque constructeur et sera situé devant de tout le code du constructeur.
J'ai cherché pendant longtemps mais je n'ai pas trouvé le temps d'exécution du bloc. Plus tard, j'ai utilisé javap -c pour vérifier le fichier de classe et j'ai découvert que le bloc avait été lancé dans le constructeur et que la méthode <init> La superclasse invocationspecial y était également, mais devant le bloc. Cela explique votre problème.
Tout d'abord, après avoir utilisé la commande javac pour compiler une classe Java, le bloc de code d'initialisation de la classe Java disparaîtra - le code dans le bloc de code d'initialisation sera "restauré" à chaque constructeur et sera situé devant de tout le code du constructeur.
Processus de base :
Vous pouvez l'analyser vous-même.