static变量属于类而非对象,jvm在类加载时于方法区分配唯一内存,所有实例共享同一份数据,可通过类名或对象访问,且不依赖对象创建。

因为 static 变量属于类本身,而不是某个具体对象。
它在内存中只有一份副本
Java 虚拟机(JVM)在类加载阶段就为 static 变量分配内存,存放在方法区的静态域中。无论你创建多少个该类的对象,JVM 都不会重复分配空间——所有实例访问的,是同一块内存地址上的那个变量。
它不依赖对象实例就能存在
static 变量随类一起加载,早于任何对象的创建。哪怕你一个实例都没 new,只要类被加载(比如调用了它的静态方法、访问了它的静态字段),这个变量就已经可用。所以它天然“脱离”了对象生命周期,自然能被所有实例共享。
访问路径统一且直接
- 你可以用 类名.变量名 直接读写,比如
Chinese.nation - 也可以通过任意对象访问(如
c1.nation),但这只是语法糖,JVM 底层仍解析为类级访问 - 所有实例修改的都是同一个值,改一处,其他地方立刻可见
和实例变量有本质区别
普通实例变量每 new 一次对象就分配一份新内存;而 static 变量只分配一次。这种设计不是为了“让实例能访问”,而是为了“让类级别数据可被统一管理和共享”——实例能访问,只是这种共享机制的自然结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











