执行结果是:
A
C
B
H
E
C
B
D
G
C
B
D
F
I
测试如下:
参考链接:
class no1{
// https://blog.csdn.net/Kern_/article/details/115673129
// 1、创建a1对象,先执行静态初始化
static {
System.out.println("A");
}
// 3、创建a1对象,再调用无参的构造函数
// 7、创建a2对象,因为未指明调用父类哪个构造器,所以就默认调用父类无参的构造器
// 11、创建a3对象,调用父类无参的构造器
no1(){
System.out.println("B");
}
// 2、创建a1对象,接着执行非静态块
// 6、创建a2对象,因为父类静态块只执行一次,所以就执行父类非静态代码块
// 10、创建a3对象,执行父类非静态代码块
{
System.out.println("C");
}
}
class no2 extends no1{
// 8、创建a2对象,执行子类非静态代码块
// 12、创建a3对象,调用子类非静态代码块
{
System.out.println("D");
}
// 5、创建a2对象,执行子类静态代码块
static {
System.out.println("E");
}
// 13、创建a3对象,调用子类无参的构造器
no2(){
System.out.println("F");
}
// 9、创建a2对象,调用子类有参的构造方法
no2(int a){
System.out.println("G");
}
}
public class CallSequenceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
no1 a1 = new no1();
// 4、创建完a1对象,接着执行main方法这行代码
System.out.println("H");
no1 a2 = new no2(1);
no2 a3 = new no2();
// 14、创建完a3对象,调用main方法此行代码
System.out.println("I");
}
}
跑不出来吗