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