Skip to content

变量与常量

变量和常量是程序中存储数据的基本单元。

变量

变量三要素:类型、名称、值

java
// 完整声明
int age;        // 声明变量
age = 25;       // 赋值

// 声明时初始化
int score = 100;

// 多个同类型变量
int x = 1, y = 2, z = 3;

变量分类

类型声明位置生命周期默认值
局部变量方法或代码块内部方法/代码块执行期间无(必须初始化)
实例变量类中,方法外对象存在期间有默认值
静态变量类中,方法外,static 修饰程序运行期间有默认值
java
public class Variables {
    // 实例变量
    private String name = "Java";

    // 静态变量
    private static int count = 0;

    public void method() {
        // 局部变量
        int localVar = 10;
        System.out.println(localVar);
    }
}

命名规范

java
// GOOD: 有意义的命名
int userAge;
String userName;
boolean isActive;

// BAD: 无意义的命名
int a;
String n;
boolean flag;

常量

使用 final 关键字修饰,定义后不能被修改。

java
// 声明常量
final int MAX_COUNT = 100;
final String APP_NAME = "MyApp";

// 尝试修改会编译错误
// MAX_COUNT = 200;  // 编译错误

命名规范

常量名称使用大写字母和下划线。

java
// GOOD
final int MAX_RETRY_COUNT = 3;
final String DEFAULT_CHARSET = "UTF-8";
final double PI = 3.14159;

// BAD
final int maxCount = 3;      // 应该全大写
final int MAX_COUNT = 3;     // 应该用下划线

静态常量

使用 static final 修饰。

java
public class Constants {
    // 静态常量 - 推荐
    public static final int MAX_SIZE = 1000;

    // 实例常量 - 不推荐
    public final int INSTANCE_CONST = 1;
}

何时使用常量

用常量替代魔法值(Magic Number),让代码更易读。

java
public class UserService {
    // 使用常量替代魔法值
    private static final int MAX_LOGIN_ATTEMPTS = 5;
    private static final int PASSWORD_MIN_LENGTH = 6;
    private static final int PASSWORD_MAX_LENGTH = 20;
    private static final String DEFAULT_ROLE = "USER";

    public boolean login(String password, int attempts) {
        if (attempts > MAX_LOGIN_ATTEMPTS) {
            return false;
        }

        return password.length() >= PASSWORD_MIN_LENGTH
            && password.length() <= PASSWORD_MAX_LENGTH;
    }
}

成员变量 vs 局部变量

对比项成员变量局部变量
声明位置类中,方法外方法内或代码块内
修饰符public/private/static 等
存储位置堆内存栈内存
生命周期对象存在期间方法/代码块执行期间
默认值无(必须显式初始化)
初始化自动初始化必须手动初始化
java
public class Example {
    // 成员变量 - 有默认值
    private String name;      // 默认 null
    private int age;          // 默认 0
    private boolean active;   // 默认 false

    public void method() {
        // 局部变量 - 必须初始化
        int count = 0;
        // 编译错误:count 未初始化
        // System.out.println(count);

        count = 10;  // 必须先赋值
        System.out.println(count);  // OK
    }
}

变量的作用域

java
public class ScopeDemo {
    private int classScope = 1;  // 类作用域

    public void method() {
        int methodScope = 2;  // 方法作用域

        if (true) {
            int blockScope = 3;  // 代码块作用域

            // 可以访问外部变量
            System.out.println(classScope);
            System.out.println(methodScope);
            System.out.println(blockScope);
        }

        // 超出作用域,无法访问 blockScope
        // System.out.println(blockScope);
    }
}

作用域屏蔽

同名变量在内部代码块会屏蔽外部变量。

java
int count = 10;

if (true) {
    // 内部 count 屏蔽了外部 count
    int count = 20;  // 编译错误:变量已定义
}

// 同名变量应使用不同代码块
if (true) {
    int count = 20;  // 这是新变量
}
System.out.println(count);  // 输出 10

常量应用场景

配置常量

java
public class AppConfig {
    public static final String APP_NAME = "JTechVault";
    public static final String VERSION = "1.0.0";
    public static final String AUTHOR = "Java Developer";
}

状态常量

java
public class OrderStatus {
    public static final int PENDING = 0;
    public static final int PAID = 1;
    public static final int SHIPPED = 2;
    public static final int DELIVERED = 3;
    public static final int CANCELLED = 4;

    public static String getStatusName(int status) {
        switch (status) {
            case PENDING: return "待支付";
            case PAID: return "已支付";
            case SHIPPED: return "已发货";
            case DELIVERED: return "已送达";
            case CANCELLED: return "已取消";
            default: return "未知状态";
        }
    }
}

限制常量

java
public class UserValidator {
    private static final int MIN_AGE = 0;
    private static final int MAX_AGE = 150;
    private static final int MIN_NAME_LENGTH = 2;
    private static final int MAX_NAME_LENGTH = 50;

    public boolean validateAge(int age) {
        return age >= MIN_AGE && age <= MAX_AGE;
    }

    public boolean validateName(String name) {
        return name != null
            && name.length() >= MIN_NAME_LENGTH
            && name.length() <= MAX_NAME_LENGTH;
    }
}

最佳实践

变量初始化

java
// GOOD: 声明时初始化
int count = 0;
String name = "";

// GOOD: 使用前初始化
int result;
if (condition) {
    result = 1;
} else {
    result = 2;
}

// BAD: 声明但不初始化
int count;
System.out.println(count);  // 编译错误

常量集中管理

java
// GOOD: 常量类统一管理
public class SystemConstants {
    public static final int PAGE_SIZE_DEFAULT = 20;
    public static final int PAGE_SIZE_MAX = 100;
    public static final int SESSION_TIMEOUT = 1800;  // 秒
}

// BAD: 常量分散定义
public class UserService {
    public static final int PAGE_SIZE = 20;
}

public class OrderService {
    public static final int PAGE_SIZE = 20;  // 重复定义
}

使用 enum 代替常量组

java
// BAD: 使用 int 常量
public static final int STATUS_SUCCESS = 1;
public static final int STATUS_FAIL = 0;

// GOOD: 使用枚举
public enum Status {
    SUCCESS,
    FAIL
}

基于 VitePress 构建