父类Parent如下:
public class Parent {
public static int age;
char name;
{ System.out.println("非静态属性name的值为"+name+";说明非静态属性已经初始化");
System.out.println("父类的代码块");
}
static{
System.out.println("静态属性age的值为"+age+";说明静态属性已经初始化");
System.out.println("父类的静态代码块");
}
Parent(){
System.out.println("父类无参构造");
}
}
子类Child如下:
public class Child extends Parent{
{
System.out.println("子类的代码块");
}
static{
System.out.println("子类的静态代码块");
}
Child(){
System.out.println("子类无参构造");
}
public static void main(String[] args) {
System.out.println("-------------new第1个对象-------------");
Child c = new Child();
System.out.println("-------------new第2个对象-------------");
Child c1 = new Child();
}
}
测试结果:
image.png由上可以看出
step1:先加载child类,发现有父类则先加载父类,
加载过程:初始化静态变量-->执行父类静态块-->初始化实例变量
然后加载子类,执行子类静态块
step2:执行new,先执行父类里普通代码块,再执行父类无参构造,接着是子类的普通代码块,子类的无参构造
step3:第二次new的时候,由于类已经加载过,重复step2
网友评论