今天在阅读《揭秘Java虚拟机》一书中看到JVM在对Java类进行实例化之前,将会执行类的<clinit>()方法,当Java类中包含static修饰的静态字段或者使用static{}块包裹时,编译之后将会在字节码文件中包含一个名为<clinit>()的方法,我们来验证一下:
一、static 修饰静态字段:
示例代码:
public class Test{
static String a;
}
编译之后字节码:
我们发现并没有出现<clinit>()方法, 莫非是我们static字段没有赋值导致的?
我们给static字段赋值,编译之后的字节码:
结果发现果然编译之后,字节码出现了我们期待的<clinit>()方法
二、static静态代码块
示例代码:
public class test {
static{}
}
编译之后字节码:
我们发现很正常的出现了期待的<clinit>()方法,
学习中记录一下,欢迎大家一起指点分享