java变量的可用性、作用范围与存在与否由声明位置决定:局部变量限于代码块内、须显式初始化;成员变量属对象、全类可见、有默认值;静态变量属类、共享且生命周期最长。

Java 里变量能不能用、在哪能用、用完还存不存在,全由“声明位置”决定。不是写了就能用,关键看它生在哪儿、活在哪儿。
局部变量:只在小圈子里有效
在方法里、for 循环中、if 块或任意一对 {} 里定义的变量,就是局部变量。它一出生就绑定在那个代码块里,出了括号就“消失”——不是清空值,是根本不可见、不可访问。
- 必须显式初始化才能用,比如 int count; 后直接 System.out.println(count); 会编译失败,得写成 int count = 0;
- for 里的 i 只能在循环内用,循环外写 System.out.println(i); 会报错“找不到符号”
- 同级两个 {} 块互不认对方的变量,哪怕只隔一行
- 不能加 public、private 或 static 修饰符
成员变量(实例变量):属于对象,整类通用
写在类里、所有方法外面的变量,就是成员变量。每个 new 出来的对象都有一份自己的副本,不同对象之间互不影响。
- 作用域覆盖整个类:所有非静态方法、构造器、代码块都能直接用
- 系统自动给默认值:int 是 0,boolean 是 false,引用类型是 null
- 如果方法里声明了同名局部变量,它会把成员变量“盖住”,想用成员变量就得加 this.name
- 访问权限受 private/protected/public 控制,但作用域本身仍是全类范围
静态变量(类变量):属于类,大家共用一份
用 static 修饰的成员变量,不属于某个对象,而是属于整个类。所有实例共享同一份数据,也支持不创建对象就直接使用。
- 作用域也是整个类,还能通过 类名.变量名 在类外部直接访问(权限允许时)
- 随类加载而存在,程序结束才销毁,生命周期比对象更长
- 同样有默认初始值,规则和成员变量一致
- 适合做计数器、全局配置、工具类常量(常配合 final 使用)
作用域冲突与遮蔽:名字撞车怎么办
当局部变量和成员变量同名,Java 按“就近原则”优先用局部变量——这不是错误,是设计行为。但容易引发逻辑误读。
- 构造器或方法参数叫 name,成员变量也叫 name,赋值时写 name = name; 实际上是把参数赋给自己,成员变量没变
- 正确写法是 this.name = name;,明确指向成员变量
- IDE 通常会标黄提示“可能遮蔽字段”,别忽略这个警告
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











