对象创建过程

public class TestZhiXing {
    public static void main(String[] args) {
        new B();
        System.out.println("=================");
        new B();
    }
}
class A{
    int v1=1;//5.v1变量分配内存初始化为0;//7.赋值
    static int v2=2;//1.静态变量v2分配内存,默认初始化为0;//3.v2赋值
    static{
        System.out.println("A的静态块");//3.静态初始化块
    }
    public A() {
        System.out.println("A的构造方法");//8.父类构造方法
    }
}
class B extends A{
    int v3=3;//6.v3分配内存初始化为0;//9.赋值
    static int v4=4;//2.静态变量v4分配内存,默认初始化为0;//4.赋值
    static{
        System.out.println("B的静态块");//4.子类静态块
    }
    public B() {
        System.out.println("B的构造方法");//10.子类构造
    }
}

过程如下:
第一次使用A、B类
1.加载父类,为父类的静态变量v2分配内存,初始化为0
2.加载子类,为子类的静态变量v4分配内存,初始化为0
3父类静态变量赋值运算v2=2;同时父类静态初始化块执行
4子类静态变量赋值运算v4=4;同时子类静态初始化块执行

再次使用A、B类
5创建父类对象,为父类的“实例变量”分配内存v1=0;
6创建子类对象,为子类的“实例变量”分配内存v3=0;
7父类“实例变量”的赋值运算v1=1;
8父类构造方法执行
public A(){}
9子类“实例变量”的赋值运算
v3=3
10子类构造方法执行
public B(){}

你可能感兴趣的:(对象创建过程)