Non riesco a capire il seguente testo ... Significa che <clinit>
è per costruttori vuoti? Perché è importante avere due versioni differenti?Java: Qual è la differenza tra <init> e <clinit>?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
A livello della macchina virtuale Java, ogni costruttore (§2.12) appare come un metodo di inizializzazione istanza che ha il nome speciale
<init>
. Questo nome è fornito da un compilatore. Poiché il nome<init>
non è un identificatore valido, non può essere utilizzato direttamente in un programma scritto nel linguaggio di programmazione Java. I metodi di inizializzazione dell'istanza possono essere richiamati solo all'interno della macchina virtuale Java mediante l'istruzione invokespecial e possono essere invocati solo in istanze di classe non inizializzate. Un metodo di inizializzazione dell'istanza accetta le autorizzazioni di accesso (§2.7.4) del costruttore da cui è stato derivato .Una classe o un'interfaccia ha al massimo un metodo di inizializzazione di classe o di interfaccia ed è inizializzato (§2.17.4) richiamando il metodo . Il metodo di inizializzazione di una classe o di un'interfaccia è statico e non accetta argomenti. Ha il nome speciale
<clinit>
. Questo nome è fornito da un compilatore. Poiché il nome<clinit>
non è un identificatore valido , non può essere utilizzato direttamente in un programma scritto nel linguaggio di programmazione Java . I metodi di inizializzazione di classe e interfaccia vengono richiamati implicitamente dalla macchina virtuale Java; non sono mai richiamati direttamente da qualsiasi Java virtual machine inw2struction, ma sono invocati solo indirettamente come parte del processo di inizializzazione della classe.
Cosa significa 'CL' stand for? –
La mia ipotesi è "classe". – Thilo
@Thilo è interessante perché la JVM tratta una definizione di classe come solo un altro tipo di oggetto. –