new一个对象的过程:
首先判断类是否加载,没有的话先加载类,由父及子。静态变量在此阶段加载,详情见类加载。
接着为对象分配内存空间并隐式初始化,由父及子,按顺序分配。
然后执行构造函数,在执行子类构造函数之前会先执行父类构造函数,在执行构造函数之前,又会先执行显示初始化和非静态代码块,执行顺序和定义顺序一致
所以执行顺序为:
父类静态变量,静态代码块>>子类静态变量,静态代码块>>父类非静态变量,非静态代码块>>父类构造函数>>子类非静态变量,非静态代码块>>子类构造函数
为数据分配内存空间时会隐式初始化