Java变量是受类型、作用域、生命周期和初始化规则约束的内存契约;基本类型存值,引用类型存地址;局部变量须显式初始化,实例与静态变量有默认值。

Java 变量不是简单“存个数”的容器,而是由类型、作用域、生命周期和初始化规则共同定义的内存契约。掌握它,关键不在背语法,而在理解 JVM 如何根据声明位置和修饰符分配内存、何时赋默认值、以及为什么有些变量不初始化就报错。
变量必须先声明再使用,类型决定一切
Java 是强类型语言,每个变量都绑定一个明确的数据类型——这直接决定 JVM 分配多少内存、支持哪些运算。类型分两类:
- 基本类型(8种):byte、short、int、long、float、double、char、boolean。它们直接存值,内存大小固定,比如 int 总占 4 字节。
- 引用类型:String、数组、自定义类等。变量中存的是对象在堆中的地址,不是对象本身。
声明时必须写明类型,例如 int count; 或 String name;。不能省略,也不能后期改类型。
四种作用域,对应四类变量
变量能在哪里用、能活多久,取决于它在哪声明:
立即学习“Java免费学习笔记(深入)”;
-
局部变量:在方法、构造器或 {} 块内声明。作用域仅限当前块,必须显式初始化(如
int x = 5;),否则编译失败。 - 实例变量:在类里、方法外声明,且无 static。每个对象一份副本,随对象创建而存在,有默认值(int 默认 0,Object 默认 null)。
-
静态变量:用
static修饰,属于类本身。所有实例共享同一份,类加载时初始化,可通过ClassName.var直接访问。 -
参数变量:方法括号里的变量(如
void print(String msg)中的msg),本质是特殊的局部变量,作用域覆盖整个方法体。
初始化规则:什么时候必须赋值?
是否强制初始化,取决于变量类型和位置:
- 局部变量:声明后、首次使用前必须赋值,编译器会严格检查。
- 实例变量与静态变量:可不写初始值,JVM 自动赋予默认值(数值型为 0,boolean 为 false,引用类型为 null)。
- 声明即初始化更安全:如
String status = "pending";比先声明再赋值更清晰,也避免空指针风险。
命名与内存:小细节影响大
变量名不只是标签,它关联着可读性和 JVM 行为:
- 命名需符合规范:字母/下划线/$ 开头,不能数字开头;区分大小写;避免关键字(如 class、int)。
- 有意义的名字比缩写更重要:
userAge比ua更易维护。 - 局部变量存在栈中,快进快出;实例变量在堆中,随对象存活;静态变量在方法区,伴随类整个生命周期。


















