字節碼中的兩個方法,

<init>方法

在JVM層面每個構造方法都有一個特殊的名字叫<init>,這個名字是在編譯器中就提供了的, 因爲<init>不規範的java命名,因此咱們在java代碼裏是無法直接使用的,一個實例的初始化方法在虛擬機中是經過調用invokespecial指令來完成的。 java

<clinit>方法

一樣對於類或者接口的靜態程序塊,在JVM層面也給了他一個特殊的名字<clinit>,不管是類或者接口在被加載到class loader的時候,Java虛擬機都會調用這個類或接口的<clinit>的方法,這個方法是個無參的,返回類型爲void方法,這個方法名也是編譯器指定的,因爲這個方法名並非一個規範的方法名,因此咱們沒法在代碼中直接使用。 spa

說了這麼多,其實讀到這裏只要記住兩點:在字節碼層面<init>表示構造方法,<clinit>表示靜態程序塊。 接口

ref:The JavaTM Virtual Machine Specification(Second Edition) 3.9 Specially Named Initialization Methods ci

相關文章
相關標籤/搜索