Java变量按声明位置分为局部变量、成员变量和静态变量:局部变量作用域限于代码块内且需显式初始化;成员变量属对象所有,有默认值且随对象存亡;静态变量属类所有,全类共享且生命周期最长。

Java 变量不是“写出来就能用”,关键在声明位置——它直接决定你能在哪里访问、能活多久、要不要自己赋初值。
局部变量:只在“眼皮底下”有效
在方法里、if里、for里、任意一对 {} 中定义的变量,都算局部变量。
- 作用域从声明那行开始,到最近的 } 结束;嵌套块里的变量,外层根本看不见
- 生命周期绑定方法调用:方法进栈时分配内存,方法返回就销毁
- 必须显式初始化才能使用,不赋值就编译报错(比如 int x; 后直接用 x + 1 不行)
- 若和成员变量同名,会自动“遮住”后者;想访问成员变量得加 this.xxx
成员变量(实例变量):跟着对象一起生灭
写在类里、方法外,且没加 static 的变量,比如 private String name;。
- 作用域是整个类:所有非静态方法、构造器都能直接用,不用声明就能访问
- 生命周期 = 对象生命周期:new 出来时诞生,GC 回收时消失
- 系统自动给默认值(int → 0、Object → null、boolean → false),不赋值也不报错
- 不能在 static 方法里直接用,否则编译失败(因为静态方法不依赖对象)
静态变量(类变量):全类共享的一份数据
加了 static 修饰、同样写在类里方法外的变量,例如 public static int count = 0;。
立即学习“Java免费学习笔记(深入)”;
- 作用域最广:类内部任意地方可用,类外部也能通过 类名.变量名 直接访问
- 生命周期最长:类加载时初始化,程序结束才销毁;所有对象共用同一份副本
- 也有默认值,规则和成员变量一致
- 适合存配置、计数器、工具类常量等跨实例共享的数据
别混淆:作用域 ≠ 生命周期
作用域管的是“能不能看到”,生命周期管的是“还在不在”。一个变量可能还在内存里(比如对象还没被 GC),但你已经超出了它的作用域,没法访问;反过来,作用域还有效,但对象已被回收,变量实际已不存在——这种分离在 Java 中很常见。


















