通常情况下成员变量隶属于对象层级,每创建一个对象就需要申请独立的内存空间来存放该对象独立的成员变量信息,若所有对象的某个成员变量数值完全一样却又单独存放会造成内存空间的浪费。
为了解决上述问题,则使用static关键字修饰成员变量表达静态的含义,此时该成员变量由对象层级提升为类层级被所有对象共享,该成员变量随着类的加载准备绪,与是否创建对象无关。
static的属性/代码块/方法都是隶属于类,在类加载时就准备完成了,而不需要创建对象(new)。
类加载只做一次,包括:
- 类名. 的时候会类加载
- new对象时会类记载
- 程序员可以用程序加载,比如:Class.forName()
static关键字也可以修饰成员方法,推荐使用 类名. 的方式访问。
静态的成员(属性和方法)可以用对象. 调用,但一般推荐用 类名. 调用。
参考资料:Java 编程进阶 41 - static关键字的基本概念