一说到static就会涉及到下面内容的加载顺序,下面的“方法+变量”有5类,再牵涉到“子类”、“父类”就有10类参与比较:
方法: | static初始化块、main方法(带static)、{static一般方法、构造方法、一般成员方法}、一般初始化块 |
变量: | static变量、 一般成员变量 |
注:蓝色部分为一类
加载顺序:
1. 父类的static成员变量;
2. 父类的static代码块;
3. 子类的static成员变量;
4. 子类的static代码块;
加载原则:先加载变量,再加载方法;先加载父类,再加载子类;
变量先于方法执行,这个我目前通过“写java代码打印输出”验证不了;
5. 父类的一般成员变量;
6. 父类的main方法... ... ... ...
main方法里有调用{static一般方法、构造方法、一般成员方法}的逻辑,他们就顺序执行;不调用不执行;
7. 子类的一般成员变量;
8. 子类的main方法... ... ... ...
main方法里有调用{static一般方法、构造方法、一般成员方法}的逻辑,他们就顺序执行;不调用不执行;
说明:蓝色部分都是普通方法,调用了才加载执行,不调用不执行,所以谈不上加载顺序。
java方法里写里书写它们的顺序就是它们的加载顺序;
另外,“一般初始化块 ”都是在new一个它所在的类对象后才执行;不new一个对象不执行;
new一个类对象后,加载顺序:1. 一般初始化块 2. 构造方法