Java变量必须先声明后使用且类型不可变;声明语法为“类型+名字+分号”;局部变量须显式初始化,字段可省略;作用域由{}严格限定,无变量提升。

Java中变量必须先声明再使用,且类型不可改变——这是编译期强制约束,不是运行时约定。
变量声明语法:类型 + 名字 + 分号
Java要求每个变量在使用前显式声明类型,不支持var(Java 10+虽引入var,但仅限局部变量且需初始化,不能用于字段或返回值)。
-
int count = 0;—— 基本类型,栈上分配 -
String name = "Alice";—— 引用类型,栈存引用,堆存对象 -
final double PI = 3.14159;——final修饰后不可重新赋值 - 字段(类成员)可省略初始化,但局部变量必须显式初始化,否则编译报错
variable might not have been initialized
作用域由花括号{}决定,与代码块嵌套深度严格对应
Java没有函数级作用域或块级提升(hoisting),变量只在声明它的最内层{}内可见:
- 类字段:整个类内可见(含子类,取决于访问修饰符)
- 方法参数:仅在该方法体内有效
- for循环中声明的变量:
for (int i = 0; i →i在循环外不可访问 - if块内声明:
if (ok) { String msg = "done"; }→msg在if外直接报错cannot resolve symbol
static和非static字段的区别直接影响生命周期和共享性
是否加static决定了变量是属于类还是属于实例:
立即学习“Java免费学习笔记(深入)”;
-
private int id;—— 每个对象一份副本,修改不影响其他实例 -
private static int counter;—— 全局唯一,所有实例共享,常用于计数器、缓存单例引用 - 注意:
static字段不能直接访问非static成员(会触发non-static variable cannot be referenced from a static context错误) - 接口中定义的字段隐式为
public static final,即使不写也生效
最容易被忽略的是:局部变量永远不会被JVM自动初始化,哪怕它是基本类型;而类字段会被赋予默认值(如int为0、boolean为false、引用类型为null)。这个差异在调试空指针或逻辑异常时,往往就是问题根源。









