Skip to content

Commit 589d04a

Browse files
committed
类的初始化情况
1 parent 55667b6 commit 589d04a

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

JVM/浓缩版/2.类的加载篇/1.类的加载过程(生命周期).md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,20 @@ Java程序对类的使用分为两种:主动使用 和 被动使用。
242242

243243
JVM启动的时候通过引导类加载器加载一个初始类。这个类在调用public static void main(String[])方法之前被链接和初始化。这个方法的执行将依次导致所需的类的加载,链接和初始化。
244244

245+
#### 被动使用的情况
245246

247+
被动使用的情况
248+
除了以上的情况属于主动使用,其他的情况均属于被动使用。被动使用不会引起类的初始化。
249+
250+
也就是说:并不是在代码中出现的类,就一定会被加载或者初始化。如果不符合主动使用的条件,类就不会初始化。
251+
252+
1. 当访问一个静态字段时,只有真正声明这个字段的类才会被初始化。
253+
当通过子类引用父类的静态变量,不会导致子类初始化
254+
2. 通过数组定义类引用,不会触发此类的初始化
255+
3. 引用常量不会触发此类或接口的初始化。因为常量在链接阶段就已经被显式赋值了。
256+
4. 调用ClassLoader类的loadClass()方法加载一个类,并不是对类的主动使用,不会导致类的初始化。
257+
258+
> 被动的使用,意味着不需要执行初始化环节,意味着没有<clinit>()的调用。
246259
247260

248261

0 commit comments

Comments
 (0)