例子:Person p = new Person(“张三”,”23”);
- 因为new用到person.class,所以先找到person.class文件,并且加载到内存中(如果有父类先加载父类)
- 执行static块以及static变量的初始化(如果有父类先初始化父类)
- 堆中分配内存(如果有父类先分配父类,然后执行4,5,接着是子类重复3,4,5)
- 执行非静态构造块以及成员变量的初始化
- 执行构造器代码
- 把内存地址赋给栈内存中的p变量
注意:
静态代码块与静态变量的初始化顺序和代码的前后顺序有直接关系
同样构造代码块跟成员变量的初始化顺序和代码的前后顺序有直接关系
静态的永远比非静态先初始化
1,2步骤就是类加载的过程