在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源其名称时
候,应该本着描述性以及唯一性这两大特征来命名,才能保证资源之间不冲突,并且每一个都便于记忆。
一、命名规范
(1)、包的命名:Java中包的名字全部是小写字母。
包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相反。由一组以".”连接的标识符构成,通常第一个标识符为符合网络域名的两个或者三个英文小写字
母。例如:net.frontfree.javagroup
转:由于Java面向对象的特性,每名Java开发人员都可以编写属于自己的Java Package,为了保障每个Java Package命名的唯一性,在最新的Java编程规范中,要求开发人员在自
己定义的包名前加上唯
一的前缀。由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称作为自己程序包的唯一前缀。例如: com.sun.swt.……。从而,我们知
道,一般公司命名为“com.公
司名.项目名.模块名....”。那,我们个人的项目又怎么命名呢?
经过我对“个人的”单词搜索,有“individual、personal、private、one-man”,进一步对以上4个单词词意的分析,并在保证了唯一性,使用每个单词的前4个字母作为前缀,正好
和“com”也做了区分。如
下:
indi:个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。包名为“indi.发起者名.项目名.模块名.……”。
pers:个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人。包名为“pers.个人名.项目名.模块名.……”。
priv:私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人。包名为“priv.个人名.项目名.模块名.……”。
onem :与“indi”相同,推荐使用“indi”。另外,我为了区分团队项目和前面所说项目的区分,还有了一下扩展:
team :团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有。包名为“team.团队名.项目名.模块名.……”。
com :公司项目,copyright由项目发起的公司所有。包名为“com.公司名.项目名.模块名.……”。
(2)、类与接口的命名:类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中
包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。
(3)、方法的命名:方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。可以为动词或动词+名词组合。
设置/获取某个值的Method,应该遵循setV/getV规范,返回长度的Method,应该命名为length。
测试某个布尔值的Method,应该命名为isV。
将对象转换为某个特定类型的Mehod应该命名为toF:getDate(); length(); isReady(); toOracleFormat()。
(4)、参数的命名:参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。
(5)、常量的命名:常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。 例如: MAX_VALUE
(6)、变量的命名:
1、普通变量命名应该采用首字母小写,其他字母首字母大写的方式。
2、final或static变量的名字应该都大写,并且指出完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。如:NUM_DAYS_IN_WEEK MAX_VALU
3、如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。如:context=ctx message=msg
4、通过在结尾处放置一个量词,就可创建更加统一的变量。
First(一组变量中的第一个);Last(一组变量中的最后一个); Next(一组变量中的下一个变量) ;Prev(一组变量中的上一个) ;Cur(一组变量中的当前变量);
5. 无论什么时候,均提倡应用常量取代数字、固定字符串。也就是说,程序中除0,1以外,尽量不应该出现其他数字。
6. 索引变量:i、j、k等只作为小型循环的循环索引变量。
7. 逻辑变量:避免用flag来命名状态变量,用is来命名逻辑变量。如:if(isClosed){ dosomeworks; return; }
(7)、数组的命名:
总是使用以下方式定义数组:int[] arr = new int[10];
禁止使用C语言的是形式:禁止 int arr[] = new int[10];
(8)、集合的命名:数组或者容器推荐命名方式为名词+s的方式。
例如:List persons = getPerson(); for(Person person : persons){ dosomeworks; }
(9)、泛型的命名:应该尽量简明扼要(最好是一个字母),以利于与普通的class或interface区分。
Container中的Element应该用E表示;Map里的key用K表示,value用V;Type用T表示;异常用X表示。
如果需要接收多个Type类型的参数,应该用邻接T的大写字母。例如S来依次表示,当然也可以用T1, T2这样的方式。
public class HashSet extends AbstractSet {…}
1. public class HashMap extends AbstractMap {…}
2. public class ThreadLocal {…}
3. public interface Functor { T val() throws X; }
二、推荐的命名
(1)、当要区别接口和实现类的时候,可以在类的后面加上“Impl”:
1. <span style="white-space:pre"> </span>//用“Exception”做为类命名的结尾
2. <span style="white-space:pre"> </span>DataNotFoundException InvalidArgumentException
(2)、抽象类最好能用“Abstract”做为类命名的开头:
1. <span style="white-space:pre"> </span>AbstractBeanDefinition AbstractBeanFactory
(3)、Test类最好能用“Test”做为类命名的结尾
1. <span style="white-space:pre"> </span>ContainerTest
(4)、简称与缩写(不推荐使用)
1、cp代表colorPoint;buf代表buffer;off代表offset;len代表length;
2、除非是在循环中,否则一般不推荐使用单个字母作为变量名,不过也有例外,即约定俗成的单个字母:
b代表byte;c代表char;d代表double;e代表Exception;f代表float;
i, j, k代表整数l代表long;o代表Object;s代表String;v代表某些类型的特定值
(5)、代码风格:
花括号:统一采用以下格式:
1. <span style="background-color: rgb(255, 255, 255);"><span style="color:#000099;"><span style="white-space: pre;"> </span>if(bool experssion){
2. <span style="white-space: pre;"> </span>dosomework;
3. <span style="white-space: pre;"> </span>}</span></span>
除非花括号中为空,不然任何情况下不能省略花括号,并且花括号必须换行,例如:if(i==0){ return; } while(true) {}
三、注释规范
(1)、类注释:在每个类前面必须加上类注释,
注释模板如下:
1. /**
2. * Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd.
3. * FileName: Test.java
4. *
5. * 类的详细说明
6. * @author 类创建者姓名
7. * @Date 建日期
8. * @version 1.00
9. */
1. <span style="color:#ff0000;"><span style="font-size: 11.8518514633179px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">(2)、属性注释:</span><span style="font-size: 11.8518514633179px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在每个属性前面必须加上属性注释,注释模板如下:</span></span>
1. /** 提示信息 */
2. private String strMsg = null;
(3)、方法注释:在每个方法前面必须加上方法注释,注释模板如下:
1. /**
2. * 类方法的详细使用说明
3. *
4. * @param 参数1 参数1的使用说明
5. * @return 返回结果的说明
6. * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明
7. */
(4)、构造方法注释:在每个构造方法前面必须加上注释,注释模板如下:
/**
1. * 构造方法的详细使用说明
2. *
3. * @param 参数1 参数1的使用说明
4. * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明
5. */
(5)、方法内部注释:在方法内部使用单行或者多行注释,该注释根据实际情况添加。如:
[
1. //背景颜色
2. Color bgColor = Color.RED