Java 静态最终变量的命名约定有什么原因吗?
我学习的是第一本Java书籍,目前正在学习数字和静态一章。他们最近引入了静态最终变量的概念。他们被解释得非常清楚。我的问题是,他们使用类名+一些任意名称来命名变量,用下划线分隔,都用大写。下面是一个例子。Java 静态最终变量的命名约定有什么原因吗?,java,oop,static,naming-conventions,final,Java,Oop,Static,Naming Conventions,Final,我学习的是第一本Java书籍,目前正在学习数字和静态一章。他们最近引入了静态最终变量的概念。他们被解释得非常清楚。我的问题是,他们使用类名+一些任意名称来命名变量,用下划线分隔,都用大写。下面是一个例子。 public class Foo { public static final int FOO_SUM = 5; } 为什么会这样?这是惯例。该格式称为。它应该用于静态final原语或仅用于原语。除其他事项外,这是在中定义的,并且它表示将被视为常数的某个事物。如
public class Foo {
public static final int FOO_SUM = 5;
}
为什么会这样?这是惯例。该格式称为。它应该用于
静态final
原语或仅用于原语。除其他事项外,这是在中定义的,并且它表示将被视为常数的某个事物。如果对象是可变的,则应不对静态final
字段使用SNAKE_大小写
类名的包含是针对调用方的。假设您有两个类A
和B
,它们都有一个公共静态最终整数
变量:
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
}
}
如果要在A
中引用B
的编号
,则必须再次使用类名:
public class A {
...
public int getBsNumberPlusTwo() {
return B.NUMBER + 2; // returns 4
}
}
该符号与可追溯到Java早期的一致。该文件包括以下理由: 本文档反映了Sun Microsystems,Inc.的Java语言规范中提出的Java语言编码标准
我的猜测是,这是一种命名常量的惯例,它是从早期语言中借用的。例如,在C语言中,编写
#define FOO_SUM 5
来定义常量(不是作为不可变变量,而是作为前置处理器的宏)是正常的。在C中使用所有大写名称有助于区分预处理器代码和其他代码。这是一种惯例。该格式称为。它只能用于静态final
原语或不可变项。它表示一些将被视为常量的东西,包括类名不是约定的一部分;我猜书中就是这样做的,因为它是一个任意的例子,“FOO”是一个任意的词Foo.Foo_SUM
是冗余的,因为它有两个类名。因为它已经嵌入到Foo
类中,我要特别避免在常量名中有Foo的冗余。