Java变量作用域分局部、实例、静态三类:局部变量在方法或代码块内声明,需显式初始化且作用域限于大括号内;实例变量属对象,有默认值,整个类可访问;静态变量属类,全实例共享,类加载时初始化。

Java 中变量不是随便声明就能用的,关键在“在哪声明”和“怎么访问”。作用域直接决定变量能不能被看到、能不能被修改,搞不清就容易编译报错或逻辑出错。
局部变量:方法里声明,用完即丢
在方法内部、for/while/if 代码块或参数列表中定义的变量,都属于局部变量。
- 作用域从声明位置开始,到所在代码块结束为止——出了大括号就不可见
- 必须显式初始化才能使用,没有默认值;比如 int x; 声明后直接 System.out.println(x); 会编译失败
- 不能加 public、private 或 static 等修饰符
- 同名时优先使用最近作用域的变量,比如方法里声明了 String name = "小明";,会覆盖类里的同名成员变量
实例变量(成员变量):属于对象,随对象而生
写在类里、方法外的非 static 变量,每个对象一份独立副本。
- 作用域是整个类,所有非静态方法都能直接访问
- 未赋值也有默认值:数值类型为 0,布尔为 false,引用类型为 null
- 可通过 this.变量名 明确调用,尤其当与局部变量重名时避免歧义
- 生命周期绑定对象:对象创建时分配在堆内存,GC 回收对象时才释放
静态变量(类变量):属于类本身,全类共享
用 static 修饰、声明在类内方法外的变量,不依赖任何对象实例。
立即学习“Java免费学习笔记(深入)”;
- 作用域也是整个类,但可通过 类名.变量名 直接访问,无需创建对象
- 类加载时就初始化,有默认值,和实例变量一致
- 所有对象共享同一份数据,适合计数器、配置项等全局状态
- 注意:static final 组合才是真正的常量,推荐大写下划线命名,如 MAX_RETRY_COUNT
作用域冲突与常见误区
变量能不能用,只看“当前代码位置是否在它的声明范围内”,和调用顺序无关。
- 同一个作用域中不能重复声明同名变量,哪怕类型不同也不行
- 循环变量(如 for(int i=0; i<5; i++))只在 for 括号内有效,循环外访问会报错
- if 或 try 块内声明的变量,即使条件恒真,也不能在块外使用
- 成员变量和局部变量同名时,局部变量会隐藏成员变量,不加 this 就访问不到后者


















