JavaScript 中的 const
在 JavaScript 中,使用 const 声明变量时必须立即初始化(赋值),不能只声明不赋值:
const a = 10; // ✅ 正确
const b; // ❌ 错误:SyntaxError: Missing initializer in const declaration
Java 中的常量定义
在 Java 中,定义常量有以下几种方式:
1. 基本常量定义(局部常量)
final int MAX_VALUE = 100;
final double PI = 3.14159;
2. 类常量(static final)
public class Constants {
// 类常量,必须在声明时或静态代码块中初始化
public static final String APP_NAME = "MyApp";
private static final int MAX_USERS;
// 静态代码块中初始化
static {
MAX_USERS = 1000;
}
}
3. 实例常量(对象常量)
public class Circle {
// 实例常量,必须在声明时或构造方法中初始化
private final double radius;
private final String color;
public Circle(double radius) {
this.radius = radius; // 构造方法中初始化
this.color = "Red"; // 构造方法中初始化
}
// 错误示例:如果在构造方法中不初始化final变量,会编译错误
public Circle() {
// this.radius 未初始化 - 编译错误
}
}
4. 数组和集合常量
// 数组引用是常量,但数组内容可以修改
final int[] NUMBERS = {1, 2, 3};
NUMBERS[0] = 10; // ✅ 可以修改数组元素
// NUMBERS = new int[5]; // ❌ 不能重新赋值
// 创建不可变集合
final List<String> NAMES = Collections.unmodifiableList(
Arrays.asList("Alice", "Bob", "Charlie")
);
主要区别
| 特性 | JavaScript const | Java final |
|---|---|---|
| 初始化要求 | 必须声明时初始化 | 可在声明时或构造方法/静态块中初始化 |
| 作用范围 | 块级作用域 | 取决于声明位置 |
| 对象内容可变性 | 对象内容可修改 | 对象内容可修改(除非特别处理) |
| 重新赋值 | 完全禁止 | 引用不可重新指向其他对象 |
最佳实践建议
- Java 常量命名规范:
// 常量通常使用全大写,单词间用下划线分隔
public static final int MAX_CONNECTIONS = 100;
public static final String DATABASE_URL = "jdbc:mysql://localhost:3306/db";
- 创建真正的不可变对象:
// 使用 Collections.unmodifiableXXX 创建不可变集合
private static final List<String> COUNTRIES =
Collections.unmodifiableList(Arrays.asList("USA", "China", "Japan"));
// 或使用Java 9+的List.of()
private static final List<String> CITIES = List.of("Beijing", "Tokyo", "London");
- 接口常量(现在不推荐):
// 旧的方式(接口只应定义行为,不应定义常量)
public interface OldConstants {
int MAX_SIZE = 100; // 默认为 public static final
}
// 推荐使用专门的常量类
public final class AppConstants {
private AppConstants() {} // 防止实例化
public static final int TIMEOUT = 5000;
public static final String APP_VERSION = "1.0.0";
}
在对比js学习java中......