Non riesco a capire il testo seguente ... Significa che <clinit>
è per costruttori vuoti? Perché è importante avere due versioni differenti?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
A livello della Java virtual machine, ogni costruttore (§2.12) appare come un metodo di inizializzazione dell'istanza che ha il nome speciale
<init>
. Questo nome viene fornito da un compilatore. Poiché il nome<init>
non è un identificativo valido, non può essere utilizzato direttamente in un programma scritto nel linguaggio di programmazione Java. I metodi di inizializzazione delle istanze possono essere richiamati solo all'interno della Java virtual machine dall'istruzione invokespecial e possono essere richiamati solo su istanze di classe non inizializzate. Un metodo di inizializzazione dell'istanza assume i permessi di accesso (§2.7.4) del costruttore da cui è stato derivato.Una classe o interfaccia ha al massimo una classe o un metodo di inizializzazione dell'interfaccia e viene inizializzata (§2.17.4) invocando quel metodo. Il metodo di inizializzazione di una classe o di un'interfaccia è statico e non accetta argomenti. Ha il nome speciale
<clinit>
. Questo nome viene fornito da un compilatore. Poiché il nome<clinit>
non è un identificativo valido, non può essere utilizzato direttamente in un programma scritto nel linguaggio di programmazione Java. I metodi di inizializzazione della classe e dell'interfaccia vengono richiamati implicitamente dalla Java virtual machine; non vengono mai richiamati direttamente da alcuna macchina virtuale Java in w2struction, ma vengono richiamati solo indirettamente come parte del processo di inizializzazione della classe.
CL
?