(1)static关键字:可以用于修饰属性、方法和类。
1,属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一的一份静态的成员变量(不能修饰临时变量
2,方法:static修饰的方法叫做静态, 对于静态方法来说,可以使用类名.方法名的方式来访问。不能重写(Override)
3,static代码块:静态代码块。静态代码块的作用也是完成一些初始化工作。 首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法在生成对象的时候执行;
顺序讲得很通透:https://www.cnblogs.com/study-everyday/p/6752715.html#autoid-0-0-0
static过程的小图解:https://www.cnblogs.com/xdp-gacl/p/3637407.html
最后加强理解,标准的图解和例题:https://blog.csdn.net/wang_1997/article/details/52267688
在static下加载的规则:
加载class过程:
父类static成员变量/static代码块/静态方法(书写顺序)-》子类static成员变量/static 代码块/静态方法-》static成员变量默认初始化(0啊这些)-》static成员变量显式初始化(就是new自身看清楚赋值没有)-》执行父类的static代码块-》执行子类的static代码块
实例化过程:
非静态成员默认初始化-》隐式调用父类的super()-》显示初始化非静态成员变量-》构造块的代码-》构造函数
总结:赋值,代码块
https://blog.csdn.net/wang_1997/article/details/52267688 例题理解:
1,就是按照我上面的顺序
2,在静态成员变量初始化-》静态成员变量显示初始化的过程中,new了自己,调用了一些静态成员变量,要注意他们现在只是初始化,并没有赋值,这道题的陷阱就是两个过程交错在一起
3,还有一点就是实例化的时候,不负责(不用理会静态成员变量的初始化)