Я не можу зрозуміти наступний текст ... Чи означає це, що <clinit>
це для порожніх конструкторів? Чому важливо мати дві різні версії?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
На рівні віртуальної машини Java кожен конструктор (§2.12) відображається як метод ініціалізації екземпляра, що має спеціальне ім'я
<init>
. Цю назву надає компілятор. Тому що ім’я<init>
не є дійсним ідентифікатором, воно не може використовуватися безпосередньо в програмі, написаній мовою програмування Java. Методи ініціалізації екземпляра можуть бути викликані лише у віртуальній машині Java за допомогою інструкції invokespecial, і вони можуть бути викликані лише в неініціалізованих екземплярах класу. Метод ініціалізації екземпляра приймає дозволи на доступ (§2.7.4) конструктора, з якого він був отриманий.Клас або інтерфейс має щонайбільше один метод ініціалізації класу або інтерфейсу і ініціалізується (§2.17.4), викликаючи цей метод. Метод ініціалізації класу або інтерфейсу є статичним і не приймає аргументів. Він має особливу назву
<clinit>
. Цю назву надає компілятор. Оскільки ім'я<clinit>
не є дійсним ідентифікатором, воно не може використовуватися безпосередньо в програмі, написаній мовою програмування Java. Віртуальна машина Java неявно викликає методи ініціалізації класу та інтерфейсу; вони ніколи не викликаються безпосередньо з будь-якої віртуальної машини Java inw2struction, а викликаються лише опосередковано як частина процесу ініціалізації класу.
CL
?