反射五:测试类何时初始化(Java)

代码示例:

package reflect;

//测试类什么时候会初始化
public class Test06 {
static {
System.out.println("Main被加载");//1.Main被加载
}
public static void main(String[] args) throws ClassNotFoundException {
//1.主动引用
Son son=new Son();
//反射也会产生主动引用
Class.forName("reflect.Son");

//不会产生类的引用的方法
System.out.println(Son.b);//通过子类调用父类的方法 4. 2
//这里不会执行子类

//常量不会引起父类和子类的初始化
System.out.println(Son.M); //5. 1
}
}

class Father{
static int b=2;
static {
System.out.println("父类被加载");//2.父类被加载
}
}

class Son extends Father{
static {
System.out.println("子类被加载");//3.子类被加载
}
static final int M=1; //常量池
}
//先执行Main,接着执行父类,再着执行子类,最后执行b和M