Nie rozumiem następującego tekstu ... Czy to znaczy, że <clinit>
jest dla pustych konstruktorów? Dlaczego ważne jest, aby mieć dwie różne wersje?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
Na poziomie wirtualnej maszyny Javy każdy konstruktor (§2.12) pojawia się jako metoda inicjalizacji instancji o specjalnej nazwie
<init>
. Ta nazwa jest dostarczana przez kompilator. Ponieważ nazwa<init>
nie jest poprawnym identyfikatorem, nie można jej używać bezpośrednio w programie napisanym w języku programowania Java. Metody inicjowania instancji mogą być wywoływane tylko w wirtualnej maszynie Javy za pomocą instrukcji invokespecial i mogą być wywoływane tylko w przypadku niezainicjowanych instancji klas. Metoda inicjalizacji instancji przyjmuje uprawnienia dostępu (§ 2.7.4) konstruktora, z którego została wyprowadzona.Klasa lub interfejs ma co najwyżej jedną metodę inicjalizacji klasy lub interfejsu i jest inicjowana (§2.17.4) przez wywołanie tej metody. Metoda inicjalizacji klasy lub interfejsu jest statyczna i nie pobiera żadnych argumentów. Ma specjalną nazwę
<clinit>
. Ta nazwa jest dostarczana przez kompilator. Ponieważ nazwa<clinit>
nie jest poprawnym identyfikatorem, nie można jej używać bezpośrednio w programie napisanym w języku programowania Java. Metody inicjowania klas i interfejsów są wywoływane niejawnie przez wirtualną maszynę języka Java; nigdy nie są wywoływane bezpośrednio z żadnej wirtualnej maszyny Javy w konstrukcji w2, ale są wywoływane tylko pośrednio w ramach procesu inicjalizacji klasy.
CL
?