局部变量作用域限于声明所在代码块内,成员变量属于对象实例且随对象存在,类变量(static)属于类且随类加载而存在;三者声明位置、可见范围与生命周期各不相同。

区分 Java 中局部变量、成员变量和类变量的作用域,关键看三点:声明位置、可见范围、生命周期。不在对的地方写,就用不了;不理解谁“管”谁,就容易覆盖或报错。
局部变量:只在自己那块括号里有效
在方法内部、for/if/while 代码块里、或者方法参数列表中定义的变量,就是局部变量。
- 作用域从声明行开始,到所在 { } 结束为止——出了大括号就找不到它
- 必须显式赋值才能使用,比如
int x;后直接System.out.println(x);会编译失败 - 不能加
public、private、static等修饰符 - 循环变量(如
for(int i = 0; i )只在 for 小括号和大括号内有效,循环外访问报错
成员变量(实例变量):整个类都能看见,每个对象一份
写在类里、所有方法外面,且没加 static 的变量,就是成员变量。
- 作用域覆盖整个类——所有非静态方法、构造器、实例代码块都能直接访问
- 系统自动给默认值:
int是0,boolean是false,引用类型是null - 每个对象独有一份,修改一个对象的成员变量,不影响其他对象
- 如果方法里有同名局部变量,它会“遮蔽”成员变量;想明确调用成员变量,得写
this.name
类变量(静态变量):属于类本身,全实例共享
用 static 修饰、声明在类内方法外的变量,就是类变量。
立即学习“Java免费学习笔记(深入)”;
- 作用域也是整个类,但可通过
类名.变量名直接访问,无需创建对象 - 所有对象共用同一份数据,改一个,全部变——适合计数器、配置项等全局状态
- 类加载时就初始化,也有默认值(规则和成员变量一致)
- 推荐搭配
final使用来定义常量,比如public static final int MAX_RETRY = 3;
变量能不能被访问,只取决于当前代码位置是否落在它的声明范围内,跟执行顺序无关。同名时按就近原则,局部 > 成员 > 类变量。写错位置,轻则编译不过,重则逻辑跑偏。


















