在开发过程中,命名的规范性是非常重要的。命名非常杂乱无序的程序无论如何称不上好的程序,毕竟,就像Martin Fowler说的:程序不光是交给机器运行的,也是让人读的。
下面总结了 Java Language Specification 规定的命名规则。
包名
由一组以“.”连接的标识符构成,通常第一个标识符为符合网络域名的两个或者三个英文小写字母,例如:
com, edu,gov, mil, net, org, uk,jp
举例:
com.JavaSoft.jag.Oak
uk.ac.city.rugby.name
org.npr.plddge.driver
要注意的是,根据Sun公司的规定,“java”不能用于第一个标识符。
类和接口命名
由一组描述性的名词或者短语构成,不应该过长,每个单词的首字母都应该大写
举例:
ClassLoader
SecurityManager
Thread
Dictionary
对于Interface,应该使用描述某种行为的形容词
举例:
Clonable
Runnable
Type VariableNames
应该尽量简明扼要(最好是一个字母),以利于与普通的class或interface区分
Container中的Element应该用E表示;Map里的key用K表示,value用V;Type用T表示;异常用X表示
如果需要接收多个Type类型的参数,应该用邻接T的大写字母——例如S——来依次表示,当然也可以用T1, T2这样的方式
如果在范型方法存在于范型类中,应当尽量避免使用同样的Type Variable Names,以免混淆
举例:
publicclass HashSet<E> extends AbstractSet<E> {...}
publicclass HashMap<K, V> extends AbstractMap<K, V> {...}
publicclass ThreadLocal<T> {...}
publicinterface Functor<T, X extends Throwable> {
T val() throws X;
}
方法命名
应该由动词或者动词短语混合构成,第一个单词小写,此后每个单词的首字母大写
设置/获取某个值的Method,应该遵循setV/getV 规范
返回长度的Method,应该命名为length
测试某个布尔值的Method,应该命名为isV
将对象转换为某个特定类型的Mehod应该命名为toF
举例:
getDate();
length();
isReady();
toOracleFormat();
Fields Names
由名词、名词短语或者名词的缩写构成
第一个单词小写,此后每个单词的首字母大写
举例:
java.io.ByteArrayInputStream中的
buf, pos,count
java.io.InterruptedIOException中的
bytesTransferred
常量命名
由多个单词或缩写组合而成,所有字母都要求大写,并且以“_”连接
举例:
MIN_VALUE
MAX_VALUE
MIN_RADIX
MAX_RADIX
局部变量和参数命名
由意义明确的短词构成,通常均为小写,而且不是完整的单词
cp代表colorPoint
buf代表buffer
off代表offset
len代表length
除非是在循环中,否则一般不推荐使用单个字母作为变量名,不过也有例外,即约定俗成的单个字母
b代表byte
c代表char
d代表double
e代表Exception
f代表float
i, j, k代表整数
l代表long
o代表Object
s代表String
v代表某些类型的特定值