Je n'arrive pas à comprendre le texte suivant... Cela signifie-t-il que <clinit>
est pour les constructeurs vides ? Pourquoi est-il important d'avoir deux versions différentes ?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
Au niveau de la machine virtuelle Java, chaque constructeur (§2.12) apparaît comme une méthode d'initialisation d'instance qui a le nom spécial
<init>
. Ce nom est fourni par un compilateur. Parce que le nom<init>
n'est pas un identificateur valide, il ne peut pas être utilisé directement dans une programme écrit dans le langage de programmation Java. Instance ne peuvent être invoquées qu'au sein de la machine virtuelle Java par l'instruction invokespecial. par l'instruction invokespecial, et elles ne peuvent être invoquées que sur des instances de classe non initialisées. sur des instances de classe non initialisées. Une méthode d'initialisation d'instance prend les droits d'accès (§2.7.4) du constructeur dont elle est dérivée. elle a été dérivée.Une classe ou une interface a au plus une méthode d'initialisation de classe ou d'interface et est initialisée (§2.17.4) en invoquant cette méthode. méthode. La méthode d'initialisation d'une classe ou d'une interface est statique et ne prend aucun argument. Elle porte le nom spécial
<clinit>
. Ce nom est fourni par un compilateur. Parce que le nom<clinit>
n'est pas un identifiant valide, il ne peut pas être utilisé directement dans un programme écrit en langage langage de programmation Java. Les méthodes d'initialisation des classes et des interfaces sont invoquées implicitement par la machine virtuelle Java ; elles ne sont jamais jamais invoquées directement à partir d'une inw2struction de la machine virtuelle Java. mais ne sont invoquées qu'indirectement dans le cadre du processus d'initialisation de la classe.