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

Dev*_*wal 2 java naming netbeans constants naming-conventions

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

当我尝试static使用小写字母声明成员变量时,我的IDE NetBeans仅向我发出警告.如果变量是final,但是非静态的,这没关系.

final int mem1 = 90; // no warning
static final int mem2 = 90; // warning
Run Code Online (Sandbox Code Playgroud)

程序员不应该强制使用大写字母来命名任何类型的(静态,非静态)常量变量吗?

Dan*_*den 8

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

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

public final class IntHolder {
  private final int value;

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

  public int get() {
    return value;
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里,value每个实例的字段明显不同IntHolder,因此它不是常数.将该字段命名为常量只会导致混淆.


小智 5

只有常量应为大写.然而,它可能取决于程序员如何遵循惯例.有些人还喜欢使用'_'开始常量,后跟小写的名称.而且,没有必要在编译器中进行这样的检查,因为它可能取决于程序员的观点.