Java变量分局部、成员、静态三类:局部变量限于代码块内且须显式初始化;成员变量属对象,有默认值且作用域为整个类;静态变量属类,所有实例共享,可直接用类名访问;同名时按就近原则优先使用局部变量。

Java 变量不是“写出来就能用”,关键在声明位置和访问方式。搞错作用域,轻则编译失败,重则值被意外覆盖、逻辑出错。
局部变量:方法或代码块内定义,用完即销毁
在方法体、for 循环、if 语句或任意 { } 代码块里声明的变量,都属于局部变量。
- 作用域严格限定在声明它的那对大括号内,跨块不可见
- 必须显式初始化后才能使用,int x; System.out.println(x); 直接报错
- 生命周期随方法/块执行开始而创建,执行结束立即释放
- 不能加 public、private、static 等访问修饰符或静态修饰符
成员变量(实例变量):属于对象,整类可见
写在类内部、所有方法外部的非 static 变量,就是成员变量。
- 每个对象拥有自己的一份副本,不同实例互不影响
- 作用域覆盖整个类——所有非静态方法、构造器、实例代码块都能直接访问
- 系统自动赋予默认值:int 是 0,boolean 是 false,引用类型是 null
- 若方法内有同名局部变量,会遮蔽成员变量;想明确访问需写 this.name
静态变量(类变量):属于类本身,所有实例共享
用 static 修饰的成员变量,不依赖对象存在,随类加载而加载。
立即学习“Java免费学习笔记(深入)”;
- 所有对象共用同一份数据,修改一处,全部可见变化
- 可在类外通过 类名.变量名 直接访问(权限允许时),无需创建对象
- 生命周期最长:从类加载开始,到程序退出或类卸载才销毁
- 同样有默认初始值,常配合 final 用于定义常量,如 static final double PI = 3.14159;
变量同名时怎么选?就近原则起作用
当局部变量、成员变量、静态变量名字相同时,Java 按照作用域嵌套层级决定优先级:
- 方法内部写了 name,就用这个局部变量
- 没声明局部变量但写了 name,就找当前类的成员变量
- 写成 ClassName.name,明确调用静态变量
- 写成 this.name,强制指向当前对象的成员变量



















