1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #1037 from iloooo/iloooo-patch

update 类加载器系统初始化阶段的更正和补充
This commit is contained in:
Guide哥 2020-12-26 14:30:50 +08:00 committed by GitHub
commit 730dee4cd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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