我正在学习HeadFirst Java书籍,目前在Numbers and statics一章中。他们最近引入了静态最终变量的概念。完全清楚地解释它们。我的问题是,他们使用类名+任意名称(以下划线分隔)将变量命名为大写。这是一个例子。
public class Foo {
public static final int FOO_SUM = 5;
}
这是为什么?
该符号与Code Conventions for the Java Programming Language一致,它可以追溯到Java的早期。该文件包括理由:
此文档反映了Sun Microsystems,Inc.的Java Language Specification中提出的Java语言编码标准。
这是一个约定。该格式称为SNAKE_CASE。它应仅在static final
原语或immutable objects上使用。除其他事项外,这在official Oracle style guide和Google Java style guide中定义。该信号表示某些内容将被视为常量。如果对象是可变的,则应该not对static final
字段使用SNAKE_CASE。
包含类名是为了调用方。假设您有两个类A
和B
,它们都有一个public static final int NUMBER
变量:
public class A {
public static final int NUMBER = 1;
}
public class B {
public static final int NUMBER = 2;
}
public class Ideone {
public static void main(String[] args) {
System.out.println(A.NUMBER); // = 1
System.out.println(B.NUMBER); // = 2
}
}
在同一个班级内,可以放弃班级名称,例如:
public class A {
public static final int NUMBER = 1;
public int getNumberPlusTwo() {
return NUMBER + 2; // returns 3
}
}
如果要在B
中引用NUMBER
的A
,则必须再次使用类名:
public class A {
...
public int getBsNumberPlusTwo() {
return B.NUMBER + 2; // returns 4
}
}