说明:笔记内容来源于《北京圣思园教育 - 张龙老师 - 深入理解JVM》视频课程。如有侵权,请联系删除。
1、内容回顾
所有的Java虚拟机实现,必须在每个类或接口被Java程序"首次主动使用"时,才初始化这个类或接口。
package com.test;
public class MyTest4 {
public static void main(String[] args) {
MyParent myParent = new MyParent();
System.out.println("=============");
MyParent myParent2 = new MyParent();
}
}
class MyParent {
static {
System.out.println("MyParent static code");
}
}
执行结果为:
结果解释:
MyParent类被首次主动使用时,才会被初始化;
创建myParent时,MyParent是首次主动使用,初始化时会执行静态代码块,
创建myParent2时,MyParent不是首次主动使用,不会再次初始化,所以静态代码块没有被执行。
2、引用类型的一维数组
package com.test;
public class MyTest4 {
public static void main(String[] args) {
//一维数组
MyParent[] myParent = new MyParent[1];
System.out.println("done");
}
}
class MyParent {
static {
System.out.println("MyParent static code");
}
}
执行结果为:
说明创建数组,不是对MyParent 的主动使用。
那myParent 的类型到底是什么呢?
package com.test;
public class MyTest4 {
public static void main(String[] args) {
//一维数组
MyParent[] myParent = new MyParent[