Je suis incapable de comprendre le texte suivant ... Cela signifie-t-il que <clinit>
c'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 portant le nom spécial
<init>
. Ce nom est fourni par un compilateur. Comme le nom<init>
n'est pas un identifiant valide, il ne peut pas être utilisé directement dans un programme écrit dans le langage de programmation Java. Les méthodes d'initialisation d'instance ne peuvent être appelées que dans la machine virtuelle Java par l'instruction invokespecial, et elles ne peuvent être appelées que 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.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. La méthode d'initialisation d'une classe ou d'une interface est statique et ne prend aucun argument. Il a le nom spécial
<clinit>
. Ce nom est fourni par un compilateur. Comme le nom<clinit>
n'est pas un identifiant valide, il ne peut pas être utilisé directement dans un programme écrit dans le langage de programmation Java. Les méthodes d'initialisation de classe et d'interface sont appelées implicitement par la machine virtuelle Java; ils ne sont jamais appelés directement à partir d'une machine virtuelle Java dansw2struction, mais ne sont invoqués qu'indirectement dans le cadre du processus d'initialisation de classe.
CL
?