为什么非静态最终成员变量不需要遵循常量命名约定?

Why non-static final member variables are not required to follow the constant naming conventions?

我正在使用 NetBeans IDE,在 Java 之前,我是一名 C++ 程序员。从 C++ 中,我学到的是常量变量名应该只包含大写字母。我认为大多数编程语言都建议常量变量应该只包含大写字母和下划线来分隔单词。

我的 IDE,NetBeans,仅当我尝试用小写字母声明 static 成员变量时才警告我有关约定。如果变量是 final 没关系,但不是静态的。

final int mem1 = 90; // no warning
static final int mem2 = 90; // warning

程序员是否应该被迫使用大写字母来命名任何类型的(静态、非静态)常量变量?

只有常量应该是大写的。然而,这可能取决于程序员如何遵循约定。有些人还喜欢以“_”开头的常量,后跟小写的名称。此外,没有必要在编译器中进行这样的检查,因为它可能取决于程序员的观点。

final 不会使值成为常量,它只是意味着该字段的值只能分配一次。

这是一个非常量最终字段的示例:

public final class IntHolder {
  private final int value;

  public IntHolder(int value) {
    this.value = value;
  }

  public int get() {
    return value;
  }
}

此处,value 字段对于 IntHolder 的每个实例明显不同,因此它不是常量。像常量一样命名字段只会导致混淆。