类加载过程及类初始化时机
package reflection;
public class Test05 {
static {
System.out.println("Main初始化");
}
public static void main(String[] args) {
//类加载过程
// A a = new A();
// System.out.println(A.m);
/*
1.加载到内存,生成类的Class对象
2.连接:类的静态变量分配内存,赋初值 m=0
3.类初始化 <clinit>(){
System.out.println("类初始化");
m=200;
m=100
}
输出:类初始化
初始化
200
*/
//测试类初始化时机
//A a1 = new A();
/*Main初始化
父类初始化!
A类初始化
A类构造器初始化
*/
//System.out.println(A.m);
/*注意
Main初始化
父类初始化!
A类初始化
100
*/
//System.out.println(A.f);//子类不初始化
/*
Main初始化
父类初始化!
2
*/
System.out.println(A.M);//常量在连接阶段放到常量池中,父类子类均不初始化
/*
Main初始化
200
*/
}
}
class F{
static {
System.out.println("父类初始化!");
}
static int f = 2;
}
class A extends F{
static {
System.out.println("A类初始化");
m=200;
}
static int m=100;
static final int M=200;
public A(){
System.out.println("A类构造器初始化");//出现在对象初始化时
}
}
过程: