JVM 字节码-03 init和clinit

2020-12-12  本文已影响0人  丿易小易

代码

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

image

init 与 clinit 都是用来初始化

init 初始化: 实例构造器,对非静态变量解析初始化

以下还没有经过校验

clinit 初始化: class类构造器对静态变量,静态代码块进行初始化...

类静态常量与静态代码块会被收集到这里(未初始化的静态常量不会写入到常量池)

image
image image

这里的static是 public static String NAME_INIt = "hello world";的初始化

且在常量池中只有一个clinit, 是NAME_INIt的变量初始化后生成

上一篇下一篇

猜你喜欢

热点阅读