父子类以及static的加载顺序
https://baijiahao.baidu.com/s?id=1660679841519186374&wfr=spider&for=pc
1 static的加载顺序
static可以被写在变量和代码块上,此时该变量和代码块不属于对象,而属于类,会在jvm执行类加载机制时的准备阶段就被赋值以及执行,而非static的变量和代码块在初始化阶段才会被赋值并执行。
因此如果问静态方法能否调用非静态变量,答案是不能,因为后者在前者执行时还没有初始化。
2 父子类的加载顺序
https://www.cnblogs.com/Ugly-bear/p/8778017.html
通过结果,可以看到父子类的初始化过程:
先从父类的静态成员进行初始化的,静态成员包括静态变量和静态代码块。
然后初始化子类的静态成员。
然后是父类的普通成员变量,包括代码普通成员和代码块。‘
再然后是父类的构造函数。
最后是子类的普通成员变量和子类的构造函数。
看到这里我才发现,原来子类的构造函数是最后才初始化。而且,父类的成员变量和父类的构造函数初始化顺序是紧挨着的。
更详细的理解得深入JVM