局部变量仅在声明它的花括号{}内有效,从声明行起生效至对应右括号结束;花括号是编译器划定的作用域硬边界,位置错误将导致编译失败。

Java 变量在不同代码块中的表现,核心就看它“在哪声明”和“被谁包裹”。花括号 {} 是硬边界,不是风格提示,而是编译器划出的可见范围线。写错位置,编译直接拦住,不给运行机会。
局部变量:只活在自己那对{}里
方法体、for 循环、if 分支、甚至随手写的 { } 代码块里声明的变量,都属于局部变量。它从声明行开始生效,到最近的 } 结束。
- for (int i = 0; i
- if (true) { String msg = "done"; } System.out.println(msg); —— 编译失败,msg 出了 if 的 } 就“消失”了
- 必须显式赋值才能用:int a; System.out.println(a); 不通过;int a = 0; 才合法
- 不能加 public、private、static 等修饰符,加了就是语法错误
实例变量(成员变量):整个类里都认得
写在类里、所有方法外面的变量,比如 private int count;,属于对象本身,每个 new 出来的实例都有自己的副本。
- 所有非静态方法、构造器、初始化块都能直接访问,不用 this 也能用
- 如果方法参数或局部变量和它同名,比如 void setCount(int count) { count = count; },那就遮蔽了成员变量——右边的 count 是参数,左边也是参数;想赋值给成员变量得写 this.count = count
- 系统自动给默认值:int 是 0,boolean 是 false,引用类型是 null,不初始化也能安全读取
静态变量:类一加载就在,大家共用一份
用 static 修饰的变量,比如 public static final String API_URL = "https://api.example.com";,它不属于某个对象,而是属于整个类。
- 作用域覆盖整个类,还能在类外通过 类名.变量名 访问(权限允许时)
- 生命周期最长:随类加载而生,程序结束才销毁
- 所有实例共享同一份数据,适合做计数器、配置项、工具类常量
- 静态方法里不能直接用实例变量,因为没对象上下文;要用就得先 new 对象再点出来
块内变量与嵌套声明:名字不能撞车
Java 不允许在内部作用域重复声明外部已有的变量名,这是编译期硬规则,不是警告。
- { int x = 5; { int x = 3; } } —— 内层 x 声明直接报错,x 已在外部块存在
- 解决办法只有两个:换名字(比如 xInner),或者把逻辑抽成独立方法,自然隔离命名空间
- if 和 else 各自的块里可以分别声明同名变量,但它们互不干扰,也都不对外暴露
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











