变量身份由声明位置决定:成员变量在class内方法外,局部变量在方法体、构造器、代码块或参数列表中;前者存堆内存、有默认值,后者存栈内存、须显式初始化。

看变量写在哪,是最直接的判断方式——位置决定身份,没有例外。
声明位置一眼分清
成员变量一定出现在 class 大括号内、所有方法之外 的地方,比如:
private String name;public static int count = 0;
局部变量只出现在以下任一位置:
- 方法体内部(如
void show() { int x = 5; }) - 构造器里(如
Person(String n) { this.name = n; }中的n) - 代码块中(
if、for、try等大括号内) - 方法参数列表(如
void print(String msg)中的msg)
作用域和访问范围不同
成员变量在整个类内部都可见(受 private/public 等修饰符限制),可在任意方法中直接使用,例如:
-
this.name或直接写name(无歧义时)
局部变量只能在它被声明的那对花括号内使用:
for (int i = 0; i → <code>i在for块外不可见-
if (x > 0) { String s = "ok"; }→s在if外无法访问
生命周期和内存位置绑定运行机制
成员变量随对象而生、随对象而灭,存在堆内存中:
- 实例变量:每个对象一份独立副本
- 静态变量:整个类共享一份,类加载时初始化
局部变量随方法调用而生、随方法返回而亡,存在栈内存中:
- 每次调用方法,都会新建一套局部变量
- 哪怕变量名相同(如参数
name和成员name),它们是完全不同的存储实体
初始化规则差异明显
成员变量有系统默认值:
-
int→0,boolean→false,引用类型 →null
局部变量必须显式赋值后才能使用,否则编译报错:
-
int a; System.out.println(a);→ 编译失败 -
int a = 0; System.out.println(a);→ 合法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











