diff --git a/docs/java/jvm/[加餐]大白话带你认识JVM.md b/docs/java/jvm/[加餐]大白话带你认识JVM.md index db8ee340..e088488c 100644 --- a/docs/java/jvm/[加餐]大白话带你认识JVM.md +++ b/docs/java/jvm/[加餐]大白话带你认识JVM.md @@ -90,7 +90,8 @@ JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机, #### 2.1.3 初始化 -初始化其实就是一个赋值的操作,它会执行一个类构造器的<clinit>()方法。由编译器自动收集类中所有变量的赋值动作,此时准备阶段时的那个 static int a = 3 的例子,在这个时候就正式赋值为3 +初始化其实就是执行类构造器方法的`()`的过程,而且要保证执行前父类的`()`方法执行完毕。这个方法由编译器收集,顺序执行所有类变量(static修饰的成员变量)显式初始化和静态代码块中语句。此时准备阶段时的那个 `static int a` 由默认初始化的0变成了显式初始化的3. 由于执行顺序缘故,初始化阶段类变量如果在静态代码块中又进行了更改,会覆盖类变量的显式初始化,最终值会为静态代码块中的赋值。 +>注意:字节码文件中初始化方法有两种,非静态资源初始化的``和静态资源初始化的``,类构造器方法`()`不同于类的构造器,这些方法都是字节码文件中只能给JVM识别的特殊方法。 #### 2.1.4 卸载