Java变量与常量 #
一、变量 #
1.1 什么是变量 #
变量是程序中存储数据的容器,具有名称、类型和值三个要素。
text
变量 = 变量名 + 数据类型 + 变量值
1.2 变量定义 #
java
// 声明变量
int age;
// 赋值
age = 25;
// 声明并初始化
String name = "张三";
// 同时声明多个变量
int a, b, c;
int x = 1, y = 2, z = 3;
1.3 变量命名规则 #
- 由字母、数字、下划线(_)、美元符号($)组成
- 不能以数字开头
- 不能使用Java关键字
- 区分大小写
java
// 合法命名
int age;
int _count;
int $price;
int userName;
int userAge;
// 非法命名
int 123abc; // 数字开头
int class; // 关键字
int user-name; // 包含减号
1.4 变量命名规范 #
java
// 小驼峰命名法
int studentAge;
String userName;
double accountBalance;
// 见名知意
int maxCount; // 最大数量
String productName; // 产品名称
boolean isValid; // 是否有效
二、变量分类 #
2.1 按数据类型分类 #
text
变量
├── 基本数据类型
│ ├── 数值型
│ │ ├── 整数类型: byte, short, int, long
│ │ └── 浮点类型: float, double
│ ├── 字符型: char
│ └── 布尔型: boolean
└── 引用数据类型
├── 类: String, User, etc.
├── 接口
└── 数组
2.2 按作用域分类 #
java
public class VariableDemo {
// 成员变量(实例变量):属于对象
private String name;
private int age;
// 静态变量(类变量):属于类
private static int count = 0;
public void method() {
// 局部变量:方法内有效
int localVar = 10;
// 方法参数
// 参数也是局部变量
}
{
// 代码块变量
int blockVar = 20;
}
}
2.3 成员变量 vs 局部变量 #
| 特性 | 成员变量 | 局部变量 |
|---|---|---|
| 定义位置 | 类体内,方法体外 | 方法体、代码块、参数 |
| 作用域 | 整个类 | 定义它的代码块 |
| 默认值 | 有默认值 | 无默认值,必须初始化 |
| 生命周期 | 对象创建到销毁 | 方法调用到结束 |
| 访问修饰符 | 可以使用 | 不能使用 |
java
public class Demo {
// 成员变量有默认值
int num; // 默认 0
double price; // 默认 0.0
boolean flag; // 默认 false
String name; // 默认 null
public void method() {
// 局部变量必须初始化
int localNum = 0; // 必须赋值
// int localNum2; // 错误:可能未初始化
}
}
三、常量 #
3.1 什么是常量 #
常量是值不可改变的变量,使用 final 关键字修饰。
3.2 定义常量 #
java
// 定义常量
final int MAX_SIZE = 100;
final double PI = 3.14159;
final String APP_NAME = "MyApp";
// 常量命名规范:全大写,单词间用下划线分隔
final int MAX_CONNECTION_COUNT = 10;
3.3 常量特点 #
java
final int NUM = 10;
NUM = 20; // 错误:常量值不能修改
// 引用类型常量:引用不可变,但对象内容可变
final int[] ARR = {1, 2, 3};
ARR[0] = 100; // 正确:可以修改数组元素
ARR = new int[5]; // 错误:不能修改引用
3.4 常量分类 #
java
public class Constants {
// 成员常量
private final int MAX_RETRY = 3;
// 静态常量(通常用于全局常量)
public static final String VERSION = "1.0.0";
public static final double PI = 3.14159;
// 局部常量
public void method() {
final int LOCAL_CONST = 100;
}
}
四、final关键字 #
4.1 final修饰变量 #
java
// 基本类型:值不可变
final int NUM = 10;
// 引用类型:引用不可变
final User user = new User();
user.setName("张三"); // 正确
// user = new User(); // 错误
4.2 final修饰方法 #
java
public class Parent {
// final方法不能被重写
public final void doSomething() {
System.out.println("Parent");
}
}
public class Child extends Parent {
// 错误:无法重写final方法
// public void doSomething() { }
}
4.3 final修饰类 #
java
// final类不能被继承
public final class Constants {
public static final String APP_NAME = "MyApp";
}
// 错误:无法继承final类
// public class MyConstants extends Constants { }
五、变量初始化 #
5.1 成员变量初始化 #
java
public class User {
// 声明时初始化
private String name = "默认用户";
private int age = 0;
// 默认值
private int id; // 0
private double salary; // 0.0
private boolean active; // false
private String address; // null
}
5.2 局部变量初始化 #
java
public void method() {
int a; // 声明
a = 10; // 使用前必须初始化
int b = 20; // 声明并初始化
// int c = a + d; // 错误:d未初始化
// int d = 30;
}
5.3 静态变量初始化 #
java
public class Counter {
// 声明时初始化
private static int count = 0;
// 静态代码块初始化
private static String config;
static {
config = "default config";
count = 0;
}
}
六、变量作用域 #
6.1 作用域规则 #
java
public class ScopeDemo {
private int memberVar = 10; // 类作用域
public void method(int param) { // param: 方法作用域
int localVar = 20; // 方法作用域
if (true) {
int blockVar = 30; // 块作用域
System.out.println(memberVar); // 可访问
System.out.println(param); // 可访问
System.out.println(localVar); // 可访问
System.out.println(blockVar); // 可访问
}
// System.out.println(blockVar); // 错误:超出作用域
}
public void anotherMethod() {
// System.out.println(localVar); // 错误:超出作用域
}
}
6.2 变量遮蔽 #
java
public class ShadowDemo {
private int value = 10;
public void method() {
int value = 20; // 局部变量遮蔽成员变量
System.out.println(value); // 输出 20
// 使用this访问成员变量
System.out.println(this.value); // 输出 10
}
public void method(int value) { // 参数遮蔽成员变量
System.out.println(value); // 输出参数值
System.out.println(this.value); // 输出成员变量
}
}
七、实践示例 #
java
public class User {
// 静态常量
public static final int MAX_AGE = 150;
public static final int MIN_AGE = 0;
// 静态变量
private static int totalCount = 0;
// 成员变量
private int id;
private String name;
private int age;
// 构造方法
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
totalCount++;
}
// 方法
public void printInfo() {
// 局部变量
String prefix = "用户信息: ";
System.out.println(prefix + name + ", " + age + "岁");
}
// 静态方法
public static int getTotalCount() {
return totalCount;
}
public static void main(String[] args) {
// 局部常量
final int MAX_USERS = 100;
User user1 = new User(1, "张三", 25);
User user2 = new User(2, "李四", 30);
user1.printInfo();
user2.printInfo();
System.out.println("总用户数: " + User.getTotalCount());
}
}
八、总结 #
| 概念 | 说明 |
|---|---|
| 变量 | 存储数据的容器,值可变 |
| 常量 | 值不可变的变量,用final修饰 |
| 成员变量 | 类级别,有默认值 |
| 局部变量 | 方法级别,无默认值 |
| 静态变量 | 类级别,所有对象共享 |
| 命名规范 | 变量小驼峰,常量全大写下划线 |
变量是程序的基础,理解变量的分类和作用域对编写正确程序至关重要。
最后更新:2026-03-26