基本类型的常量(final
)应该用大写字母书写。但是类实例呢?例如,当它作为函数参数传递时,从内部类调用,应该声明为 final。所有参数都应该是final吗?如果是这样的话:
public static void myFunction(
final MyClass CLASS_INSTANCE) {
// Code.
}
CAPITAL_LETTERS
…那么类实例呢?
不。那会很奇怪。参数使用驼峰格式。final
并不影响大小写的约定。
所有参数都应该是final吗?
。如果不应该改变,就声明为final
。这通常适用于参数,但并非总是如此。
声明final
可以做两件事:它可以帮助找出一些从未初始化或初始化后可以更改的错误;它作为一个提示,编译器允许一些优化。
不,final形参不应该全大写——它们不是常量。
术语常数和final
不是同义词。
大写确实用于常量,正如早期Java命名约定所指定的那样。
声明为类常量和ANSI常量的变量名应该全部大写,单词之间用下划线(_)分隔。
但并非所有final
声明的变量都是常量。来自Java语言规范,第4.12.4节,"最终变量":
常量变量是用常量表达式初始化的原始类型或String类型的final变量(第15.28节)。
形参不是常量。不是用常量表达式初始化的。在您的示例中,参数不是基本类型或String。
因此,参数以混合形式指定,首字母小写。
从一个小问题开始:Java并没有真正的常量。它有final静态变量,无论出于何种目的,这些变量通常表现得像常量。但是在一些罕见的情况下,它们的行为不同(并且出乎意料),甚至当它们具有原始类型时。
无论如何,按照约定,行为类似常量的变量都以大写字母命名。例如,java.awt.Color
定义了类型为Color
的常量RED
和BLUE
。(它还定义了常量red
和blue
,但由于RED
和BLUE
是后来添加的,我怀疑Sun/Oracle的人认为这些名字是错误的。)
但是形参不是常量,其行为也不像常量。对于每个方法调用,它们可以有不同的值。因此,参数总是以驼峰形式命名,即使它们被声明为final。
参数应该声明为final吗?在这里,传统停止了,纯粹的品味开始了。有些人同意,有些人不同意。我属于"不"阵营。将参数设为final可以帮助防止在试图修改它时产生编译器错误而引入bug。但是,如果您的方法体太长,以至于您实际上需要这种帮助,那么您的方法可能应该被重构。另一方面,我发现没有final
关键字的参数列表更容易阅读和更清晰,所以我倾向于把它们删掉。