初始化过程

wrhiuo / 2023-08-31 / 原文

初始化过程:

  1. 初始化父类中的静态成员变量和静态代码块(按代码出现顺序执行) ;

  2. 初始化子类中的静态成员变量和静态代码块(按代码出现顺序执行) ;

3.初始化父类的普通成员变量和普通代码块(按代码出现顺序执行),再执行父类的构造方法;

4.初始化子类的普通成员变量和普通代码块(按代码出现顺序执行),再执行子类的构造方法;

另外,在主函数中,子类实例化前的代码也在父类及子类的静态成员变量和静态代码块之后执行。

class X{
public X(String str){
System.out.println(str+" print X");
}
}
class Father{
static X x1=new X("Father Static Member");
X x2=new X("Father common Member");
public Father(){
System.out.println("Father constructor");
}
{
System.out.println("Father common code block");
}
static{
System.out.println("Father static code block");
}
static X x3=new X("Father Static Member2");
X x4=new X("Father common Member2");
}
public class Son extends Father{
{
System.out.println("Son common code block");
}
static X x1=new X("Son Static Member");
X x2=new X("Son common Member");
public Son(){
System.out.println("Son constructor");
}

public static void main(String args[]) {
    System.out.println("----main1----");
    new Son();
    System.out.println("----main2----");
}
static{
    System.out.println("Son static code block");
}
static X x3=new X("Son Static Member2");
{
    System.out.println("Son common code block2");
}

}

运行结果:
Father Static Member print X
Father static code block
Father Static Member2 print X
Son Static Member print X
Son static code block
Son Static Member2 print X
----main1----
Father common Member print X
Father common code block
Father common Member2 print X
Father constructor
Son common code block
Son common Member print X
Son common code block2
Son constructor
----main2----