创建顺序:
1。按照顺序执行父类静态变量、静态块
2。按照顺序执行子类静态变量、静态块
3。构造父类:按照顺序执行父类的普通变量、普通块
执行父类的构造函数
4。构造子类:按照顺序执行子类的普通变量、普通块
执行子类的构造函数
示例如下:(需要用debug进行调试才可以看到变量的顺序)
package ms;
public class MS_Extends {
public static void main(String[] args) {
//A a = new A();
B b = new B();
//A a = new B();
}
}
class A{
public static int a = 0;
public int b = 0;
static{
System.out.println("■父类 - 静态初始块 - 位置是构造函数前");
}
{
System.out.println("■父类 - 普通初始块 - 位置是构造函数前");
}
public A(){
System.out.println("■父类 - 构造函数");
}
static{
System.out.println("■父类 - 静态初始块 - 位置是构造函数后");
}
{
System.out.println("■父类 - 普通初始块 - 位置是构造函数后");
}
}
class B extends A{
public static int a = 0;
public int b = 0;
static{
System.out.println("◆子类 - 静态初始块 - 位置是构造函数前");
}
{
System.out.println("◆子类 - 普通初始块 - 位置是构造函数前");
}
public B(){
System.out.println("◆子类 - 构造函数");
}
static{
System.out.println("◆子类 - 静态初始块 - 位置是构造函数后");
}
{
System.out.println("◆子类 - 普通初始块 - 位置是构造函数后");
}
}
运行结果:
■父类 - 静态初始块 - 位置是构造函数前
■父类 - 静态初始块 - 位置是构造函数后
◆子类 - 静态初始块 - 位置是构造函数前
◆子类 - 静态初始块 - 位置是构造函数后
■父类 - 普通初始块 - 位置是构造函数前
■父类 - 普通初始块 - 位置是构造函数后
■父类 - 构造函数
◆子类 - 普通初始块 - 位置是构造函数前
◆子类 - 普通初始块 - 位置是构造函数后
◆子类 - 构造函数