Não consigo entender o seguinte texto ... Isso significa que <clinit>
é para construtores vazios? Por que é importante ter duas versões diferentes?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
No nível da máquina virtual Java, cada construtor (§2.12) aparece como um método de inicialização de instância que possui o nome especial
<init>
. Este nome é fornecido por um compilador. Como o nome<init>
não é um identificador válido, ele não pode ser usado diretamente em um programa escrito na linguagem de programação Java. Os métodos de inicialização de instância podem ser chamados apenas na máquina virtual Java pela instrução invokespecial e podem ser chamados apenas em instâncias de classe não inicializadas. Um método de inicialização de instância assume as permissões de acesso (§2.7.4) do construtor do qual foi derivado.Uma classe ou interface tem no máximo um método de inicialização de classe ou interface e é inicializada (§2.17.4) invocando esse método. O método de inicialização de uma classe ou interface é estático e não leva argumentos. Tem um nome especial
<clinit>
. Este nome é fornecido por um compilador. Como o nome<clinit>
não é um identificador válido, ele não pode ser usado diretamente em um programa escrito na linguagem de programação Java. Os métodos de inicialização de classe e interface são chamados implicitamente pela máquina virtual Java; eles nunca são chamados diretamente de qualquer instrução de máquina virtual Java, mas são chamados apenas indiretamente como parte do processo de inicialização da classe.
CL
significa?