java变量作用域分局部、成员、静态三类:局部变量在方法/块内声明,用完即销毁且须显式初始化;成员变量属对象,全类可见并有默认值;静态变量属类,所有实例共享且可通过类名访问;同名时按就近原则优先使用局部变量。

Java 中变量不是随便声明就能用的,关键在“在哪声明”和“怎么访问”。作用域决定了变量能不能被看到、什么时候能用、用完会不会自动消失。搞不清这点,轻则编译报错,重则逻辑混乱、值被意外覆盖。
局部变量:用完即走,不初始化就报错
在方法里、循环中、if 块内定义的变量都属于局部变量。它的特点是:从声明那行开始生效,到对应的大括号 } 结束为止。
- 必须显式初始化才能使用,比如 int count; 声明后直接打印会编译失败,必须写成 int count = 0;
- for 循环里的 i 只能在 for 内部用,循环外访问会报错
- 代码块 { … } 里定义的变量,连同级的另一个块也访问不到,哪怕只隔了一行
- 不能加 public、private 或 static 修饰符
成员变量(实例变量):属于对象,整类都能见
写在类里面、所有方法外面的变量,就是成员变量。它绑定在每个对象上,不同对象有各自的副本。
- 作用域覆盖整个类——所有非静态方法、构造器、代码块都能直接用
- 系统自动给默认值:int 是 0,boolean 是 false,引用类型是 null
- 如果方法里声明了同名局部变量,会把成员变量“盖住”,想访问得加 this.name
- 访问权限受 private/protected/public 控制,但作用域本身仍是全类范围
静态变量(类变量):属于类,大家共用一份
用 static 修饰的成员变量,不属于某个对象,而是属于整个类。所有实例共享同一份数据。
- 作用域也是整个类,但还能通过 类名.变量名 在类外部直接访问(只要权限允许)
- 随类加载而存在,程序结束才销毁;比对象生命周期更长
- 同样有默认初始值,和成员变量一致
- 常用于计数器、配置项、工具类常量(配合 final 使用)
变量冲突与就近原则
当局部变量、成员变量、静态变量同名时,Java 按“就近”规则决定用哪个:
- 方法内声明了 name,就优先用这个局部变量
- 没声明局部变量但写了 name,则找当前类的成员变量
- 写成 ClassName.name 就明确指定用静态变量
- 写成 this.name 明确指向当前对象的成员变量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











