No puedo entender el siguiente texto ... ¿Significa que <clinit>
es para constructores vacíos? ¿Por qué es importante tener dos versiones diferentes?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
En el nivel de la máquina virtual Java, cada constructor (§2.12) aparece como un método de inicialización de instancia que tiene un nombre especial
<init>
. Este nombre lo proporciona un compilador. Porque el nombre<init>
no es un identificador válido, no se puede utilizar directamente en un programa escrito en el lenguaje de programación Java. Los métodos de inicialización de instancias pueden invocarse solo dentro de la máquina virtual Java mediante la instrucción inokespecial, y pueden invocarse solo en instancias de clases no inicializadas. Un método de inicialización de instancia adquiere los permisos de acceso (§2.7.4) del constructor del que se deriva.Una clase o interfaz tiene como máximo una clase o método de inicialización de interfaz y se inicializa (§2.17.4) invocando ese método. El método de inicialización de una clase o interfaz es estático y no toma argumentos. Tiene el nombre especial
<clinit>
. Este nombre lo proporciona un compilador. Dado que el nombre<clinit>
no es un identificador válido, no se puede utilizar directamente en un programa escrito en el lenguaje de programación Java. Los métodos de inicialización de clases e interfaces son invocados implícitamente por la máquina virtual Java; nunca se invocan directamente desde ninguna máquina virtual Java en la construcción, sino que sólo se invocan indirectamente como parte del proceso de inicialización de la clase.
CL
?