java变量必须先声明类型再使用,遵循“数据类型 变量名;”语法;局部变量需显式初始化,实例与静态变量有默认值;作用域由位置和修饰符决定;同名时局部变量遮蔽成员变量,需用this访问。

变量声明必须明确类型且先声明后使用
Java是强类型语言,所有变量使用前必须声明类型。语法统一为:数据类型 变量名; 或 数据类型 变量名 = 初始值;,结尾必须带分号。基本类型(如int、boolean)和引用类型(如String、ArrayList)都适用该规则。
常见误区包括:用逗号连写多个变量(如int a, b, c;),虽合法但可读性差、易引发初始化遗漏;变量名以数字开头、使用关键字(如class、int)或含特殊符号,都会编译失败。
- 推荐命名:类成员变量与局部变量均用小驼峰(如userName、totalCount)
- 常量必须全大写加下划线(如MAX_RETRY、DEFAULT_TIMEOUT)
- 避免拼音、$开头(可能与编译器生成名冲突)
三类变量的作用域与生命周期截然不同
变量在哪声明、能被谁访问、活多久,完全由其类别决定——不是靠“名字”,而是靠位置和修饰符。
- 局部变量:定义在方法、构造器或任意代码块(if/for)内;作用域从声明行起,到对应{的}结束;未初始化就访问会直接编译报错;存于栈内存,方法调用结束即销毁
- 实例变量:定义在类中、所有方法外,无static修饰;每个对象一份,属于该实例;整个类内(非静态上下文)都可访问;系统自动赋予默认值(int→0,boolean→false,引用类型→null);存于堆内存
- 静态变量:用static修饰,定义在类中方法外;属于类本身,所有实例共享;类加载时创建,程序终止才释放;有默认值,可用静态代码块做复杂初始化;存于方法区
遮蔽(Shadowing)是合法但需谨慎处理的现象
当局部变量与成员变量同名时,局部变量会“遮蔽”成员变量——这不是错误,而是设计允许的行为。关键在于如何明确访问被遮蔽的成员。
例如:private String name; 和 void setName(String name) { this.name = name; } 中,参数name遮蔽了成员变量name,必须用this.name指向成员;若在静态方法中尝试用this,则编译失败——因为静态上下文无this。
- 内部代码块不能重复声明外部已存在的同名变量(如外部有int x;,内部{ int x = 5; }会报错)
- 遮蔽只发生在可访问前提下(private成员不会被子类参数遮蔽)
- 遮蔽不改变原变量值或生命周期,仅影响当前作用域内的标识符解析
初始化时机决定是否必须手动赋值
是否需要显式初始化,取决于变量类型和声明位置,这是面试高频陷阱点。
- 局部变量:声明即存在,但未赋值不可读;哪怕只声明不使用也不报错,一旦参与运算或输出却未初始化,编译直接失败
- 实例变量:声明即分配空间,系统自动设默认值;可在声明处初始化(String desc = "default";),也可在构造器中赋值
- 静态变量:类加载时初始化一次;支持静态代码块(static { initConfig(); })执行复杂逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











