这种理解不完全正确,下面分别说明 Java 和 C 中常量的初始化情况。
Java 中常量的初始化
在 Java 里,使用 final 关键字定义常量时,常量并非都要在声明时初始化,具体情况如下:
类的静态常量
如果 final 修饰的是类的静态常量(即使用 static final 修饰),有两种初始化方式:
声明时初始化:这是最常见的方式,例如:
F:\Java\learning example\src\PointsRewardSystem.java
Apply
public class Constants {
public static final int MAX_VALUE = 100;
}
静态代码块中初始化:可以在静态代码块里对静态常量进行初始化,示例如下:
F:\Java\learning example\src\PointsRewardSystem.java
Apply
public class Constants {
public static final int MAX_VALUE;
static {
MAX_VALUE = 100;
}
}
类的实例常量
final 修饰的类实例常量,同样有两种初始化途径:
声明时初始化:
F:\Java\learning example\src\PointsRewardSystem.java
Apply
public class MyClass {
private final int instanceConstant = 20;
}
构造函数中初始化:可以在类的构造函数里对实例常量进行初始化,示例如下:
F:\Java\learning example\src\PointsRewardSystem.java
Apply
public class MyClass {
private final int instanceConstant;
public MyClass(int value) {
this.instanceConstant = value;
}
}
局部常量
对于局部常量,在使用之前必须完成初始化,例如:
F:\Java\learning example\src\PointsRewardSystem.java
Apply
public class Main {
public static void main(String[] args) {
final int localConstant;
localConstant = 30;
System.out.println(localConstant);
}
}
C 语言中常量的初始化
在 C 语言中,使用 const 关键字定义常量时,一般需要在声明时就完成初始化,例如:
c
Apply
#include <stdio.h>
int main() {
const int number = 10;
// const int anotherNumber; // 错误,未初始化
// anotherNumber = 20;
printf("%d\n", number);
return 0;
}
不过,在 C 语言里,const 更多地表示“只读”,不像 Java 里 final 那样严格的常量语义。
总结
Java 中的常量不一定要在声明时初始化,可根据常量的类型(静态常量、实例常量、局部常量)在不同的位置完成初始化;而 C 语言里使用 const 定义常量时,通常要在声明时就初始化