1.8、分析类的初始化
public class Test06 {
static {
System.out.println("Main类被加载");
}
public static void main(String[] args) throws ClassNotFoundException {
//1.主动引用
//Son son = new Son();
//反射也会被主动引用
//Class.forName("com.xu.reflection.Son");
//不会产生类的初始化
//System.out.println(Son.b);
//Son[] sons = new Son[10];
System.out.println(Son.M);
}
}
class Father{
static int b =1;
static {
System.out.println("父类被加载");
}
}
class Son extends Father{
static {
System.out.println("子类被加载");
a =30;
}
static int a =10;
public final static int M = 100;
}
分析:
- 产生类的初始化
- new一个实例会初始化,先加载Main类,再加载父类,最后加载子类
- 反射一个实例也会初始化
- 不产生类的初始化
- 通过子类名调用父类静态资源,加载Main类,再加载父类,不加载子类
- 创建一个类的数组 只加载Main类
- 通过类名调用常数 只加载Main类