From de550b1ff46babe31b4cf193248e96af0fa14a55 Mon Sep 17 00:00:00 2001 From: iloooo <39704559+iloooo@users.noreply.github.com> Date: Wed, 23 Dec 2020 17:49:47 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E7=B1=BB=E5=8A=A0=E8=BD=BD=E5=99=A8?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=88=9D=E5=A7=8B=E5=8C=96=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=AD=A3=E5=92=8C=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/jvm/[加餐]大白话带你认识JVM.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 卸载