JavaGuide
JavaGuide copied to clipboard
类加载的初始化阶段的clinit方法应该不是构造方法
这里图片无法显示出来了,建议小伙伴可以提交一个pr
@Snailclimb 我总结的对于 \docs\java\jvm[加餐]大白话带你认识JVM.md 下面一句话的补充和修改,请参考讨论:
2.1.3 初始化 ##初始化其实就是一个赋值的操作,它会执行一个类构造器的<clinit>()方法。由编译器自动收集类中所有变量的赋值动作,此时准备阶段时的那个 static int a = 3 的例子,在这个时候就正式赋值为3
字节码文件中初始化方法有两种,非静态资源初始化的<init>和静态资源初始化的<clinit>,类加载过程的初始化阶段就是执行类构造器<clinit>方法,顺序完成父类子类静态成员变量(类变量)显示初始化和父类子类静态代码块语句。
(注意:静态代码块中可能会对类变量再次赋值而覆盖显示初始化)
代码及字节码说明:

请参考: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.9 https://blog.csdn.net/u013309870/article/details/72975536