静态变量属于类、共享于所有实例,存于元空间,类加载时初始化;实例变量属于对象、各实例独立,存于堆内存,随对象创建而分配。

静态变量(类变量)和实例变量的本质区别,在于它们的归属主体、内存行为和生命周期完全不同。
归属主体不同
静态变量属于类本身,是类级别的成员;实例变量属于某个具体对象,是对象级别的成员。一个类可以有多个实例,但静态变量只有一份,被所有实例共同持有;而每个实例都拥有自己独立的一份实例变量。
内存分配与位置不同
静态变量在类加载时就完成初始化,内存分配在元空间(JDK 8+)或方法区(旧版本),全类共享;实例变量则随对象创建而分配在堆内存中,每个 new 出来的对象都单独拥有一套副本。
访问方式与使用限制不同
- 静态变量可通过 类名.变量名 直接访问,也可通过对象访问(不推荐);
- 实例变量只能通过 对象.变量名 访问,不存在“类名.变量名”这种用法;
- 静态方法中不能直接访问实例变量(编译报错),因为此时可能还没有任何对象存在;
- 实例方法中既能访问实例变量,也能访问静态变量。
生命周期与共享性不同
- 静态变量从类加载开始存在,直到程序结束,所有实例看到的是同一份数据;
- 实例变量随对象诞生而诞生,随对象被垃圾回收而消失,修改它不会影响其他对象;
- 常见用途:静态变量适合计数器、配置常量、工具方法状态;实例变量适合描述对象个体特征,如姓名、ID、状态等。











