代碼
public class MainTest {
public static String NAME_INIt = "hello world";
public static String NAME;
public static void main(String[] args) {
System.out.println("你好!");
}
}
命令 ==> javap -v MainTest.class
init 與 clinit 都是用來初始化
init 初始化: 實例構(gòu)造器,對非靜態(tài)變量解析初始化
以下還沒有經(jīng)過校驗
- new()
- 反射 new instance()
- 調(diào)用clone builder().build()
- 調(diào)用objectinputStream.getObject()
clinit 初始化: class類構(gòu)造器對靜態(tài)變量检疫,靜態(tài)代碼塊進行初始化...
類靜態(tài)常量與靜態(tài)代碼塊會被收集到這里(未初始化的靜態(tài)常量不會寫入到常量池)
這里的static是 public static String NAME_INIt = "hello world";的初始化
且在常量池中只有一個clinit, 是NAME_INIt的變量初始化后生成