附图!
图片说明
初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。
变量初始化(赋值)和初始化块的执行与相关语句在源码中的放置顺序一致
这里因为static Test t = new Test()在前,所以先执行new Test()赋值语句,再初始化static变量块
执行完new Test()后,a,b的值都是1,接着往下初始化static b=0赋值,b的值变成0,因为a没有重新赋值,所以值不变,还是1