我無法理解以下文本......這是否意味着<clinit>
用於空構造函數?爲什麼重要的是有兩個不同的版本?Java:<init>和<clinit>和有什麼不一樣?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
在Java虛擬機的水平,每一個構造函數(§2.12)顯示爲具有 特殊名稱
<init>
實例初始化方法。該名稱由編譯器提供。由於 名稱<init>
不是有效的標識符,因此不能直接在用Java編程語言編寫的 程序中使用。實例 初始化方法可能僅在Java虛擬機的調用指令中被調用,並且它們可能僅在未初始化的類實例上調用 。實例初始化方法 具有構造函數的訪問權限(第2.7.4節),從中可以獲得它的派生名稱 。一個類或接口最多隻有一個類或接口的初始化方法,並通過調用該方法初始化(§2.17.4)。類或接口的初始化方法是靜態的 並且不帶任何參數。它有一個特殊名稱
<clinit>
。這個名字是由編譯器提供的 。由於名稱<clinit>
不是有效的 標識符,因此它不能直接用於編程爲 Java編程語言的程序。類和接口初始化方法 由Java虛擬機隱式調用;它們從來不是從任何Java虛擬機inw2struction直接調用的 ,但是 只是作爲類初始化過程的一部分被間接調用。
是什麼`CL`立場? – 2015-07-11 13:52:16