我无法理解以下文本...这是否意味着<clinit>
空的构造函数?为什么拥有两个不同的版本很重要?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
在Java虚拟机级别,每个构造函数(第2.12节)都作为具有特殊名称的实例初始化方法出现
<init>
。该名称由编译器提供。因为该名称<init>
不是有效的标识符,所以不能直接用Java编程语言编写的程序中使用它。实例初始化方法只能由invokespecial指令在Java虚拟机内调用,并且只能在未初始化的类实例上调用。实例初始化方法具有从其获得构造函数的访问权限(第2.7.4节)。一个类或接口最多具有一个类或接口初始化方法,并通过调用该方法进行初始化(第2.17.4节)。类或接口的初始化方法是静态的,不带参数。它有特殊的名字
<clinit>
。该名称由编译器提供。因为该名称<clinit>
不是有效的标识符,所以不能直接用Java编程语言编写的程序中使用它。类和接口初始化方法由Java虚拟机隐式调用。它们从不从任何Java虚拟机指令直接调用,而仅在类初始化过程中间接调用。
CL
?