变量与常量
变量(Variable)
定义:变量是程序中存储数据的基本单元,其值可以在程序运行过程中发生改变。
特点:
- 必须先声明,后使用。
- 必须先初始化,后使用。
- 必须要有明确的数据类型(比如
int、double、String等)。
声明语法:
数据类型 变量名 = 初始值;
示例:
int age = 18;
符号常量(Symbolic Constant)
定义:常量是值不能被修改的变量。
特点:
- 使用
final关键字修饰。 - 命名通常全大写,单词间用下划线连接。
- 必须在声明时初始化。
声明语法:
final 数据类型 常量名 = 值;
示例:
final double PI = 3.14159;
// or (只需要保证只有一次赋值)
final double PI;
PI = 3.14;
字面常量(Literal Constant)
定义:直接出现在源代码中的固定值,没有变量名,直接使用值本身。
特点:
- 无标识符(没有变量名)。
- 类型由书写形式自动确定(编译器会根据值的形式推断出其类型)。
- 所有基本类型的值和字符串值都是字面常量。
声明语法:
字面常量可能会出现在赋值语句的右侧或方法参数中。
数据类型 变量名 = 初始值;
方法名(参数值);
其中 初始值 和 参数值 就是字面常量。
示例:
int age = 18;
int sum = add(1, 1);
变量与常量的区别
- 变量可以重新赋值,常量一旦赋值就不能改变。
- 变量命名通常使用驼峰式,常量命名通常全大写。
- 变量可以稍后初始化,常量必须在声明时初始化。
变量的作用域(Scope)
变量只能在其定义的作用域范围内使用,作用域由代码中的花括号所圈定的。
变量的分类
| 变量类型 | 声明位置 | 访问方式 | 生命周期 | 默认值 |
|---|---|---|---|---|
| 静态变量 | 定义在类中,使用 static 关键字修饰 |
可以通过类名直接访问,无需实例化 | 类加载后即存在,直到类被卸载或程序执行结束才销毁 | 有默认的初始化值 |
| 成员变量 | 定义在类中,但不使用 static 修饰 |
必须通过对象实例访问 | 随着对象的创建而创建,随对象销毁而销毁 | 有默认的初始化值 |
| 局部变量 | 定义在方法体内(包括方法的参数)或语句块内 | 只能在所在方法体或代码块内访问 | 执行到该变量声明处时创建,方法或语句块执行完毕时销毁 | 没有默认的初始值,使用前必须显式赋初值 |
变量的默认初始值
- 成员变量和类变量都有默认初始值,比如
int默认为0,char默认为'\u0000',boolean默认为false,引用默认为null。 - 局部变量没有默认值,使用前必须初始化,否则编译错误。
示例:
public class Dome {
private int age;
private boolean sex;
private String name;
public void printDefault() {
System.out.println(age); // 输出:0
System.out.println(sex); // 输出:false
System.out.println(name); // 输出:null
}
}
变量的访问优先原则
- 在同一作用域内不能声明重复变量名。
- 成员变量和局部变量可以重名,访问时遵循“就近原则”,优先访问局部变量。
- 如果想要访问被局部变量覆盖的成员变量,可使用
this关键字。
示例:
public class Dome {
private String name = "全局变量";
public void printName() {
String name = "局部变量";
System.out.println(name); // 输出:局部变量
System.out.println(this.name); // 输出:全局变量
}
}

Comments NOTHING