java成员变量命名规范文档格式.docx
《java成员变量命名规范文档格式.docx》由会员分享,可在线阅读,更多相关《java成员变量命名规范文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
*@authordarchon
*@version0.1,10/11/20xx
*/
在每个程序的最开始部分,一般都用javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加javadoc注释,每个注释的开头
部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。
在描述性段落之后还可以跟随一些以javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。
变量和常量命名
变量的命名
主要的的命名规范有以下三种:
camel标记法:
首字母是小写的,接下来的单词都以大写字母开头
pascal标记法:
首字母是大写的,接下来的单词都以大写字母开头
匈牙利标记法:
在以pascal标记法的变量前附加小写序列说明该变量的类型
在java我们一般使用匈牙利标记法,基本结构为scope_typeVariablename,它使用1-3字符前缀来表示数据类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
例如,定义一个整形变量,用来记录文档数量:
intdoccount,其中int表明数据类型,后面为表意的英文名,每个单词首字母大写。
这样,在一个变量名就可以反映出变量类型和变量所存储的值的意义两方面内容,这使得代码语句可读性强、更加容易理解。
byte、int、char、long、float、double、boolean和short。
数据类型/前缀(附)
byteb
charc
shortsh
inti
longl
strings
floatf
doubled
hashtableh
[]arr
listlst
Vectorv
stringbuffersb
booleanb
bytebt
mapmap
objectob
对于在多个函数内都要使用的全局变量,在前面再增加“g_”。
例如一个全局的字符串变量:
g_struserinfo。
在变量命名时要注意以下几点:
·
选择有意义的名字,注意每个单词首字母要大写。
在一段函数中不使用同一个变量表示前后意义不同的两个数值。
i、j、k等只作为小型循环的循环索引变量。
避免用Flag来命名状态变量。
用is来命名逻辑变量,如:
blnFileisFound。
通过这种给布尔变量肯定形式的命名方式,使得其它开发人员能够更为清楚的理解布尔变量所代表的意义。
如果需要的话,在变量最后附加计算限定词,如:
cursalessum。
命名不相包含,cursales和cursalessum。
staticfinal变量(常量)的名字应该都大写,并且指出完整含义。
如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。
例如,如果在代码的某些区域中使用intcnt,而在另一些区域中又使用intcount,就会给代码增加不必要的复杂性。
建议变量名中尽量不要出现缩写。
通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。
例如,请使用strcustomerFirst和strcustomerlast,而不要使用strFirstcustomer和strlastcustomer。
常用的量词后缀有:
First(一组变量中的第一个)、last(一组变量中的最后一个)、next(一组变量中的下一个变量)、prev(一组变量中的上一个)、cur(一组变量中的当前变量)。
为每个变量选择最佳的数据类型,这样即能减少对内存的需求量,加快代码的执行速度,又会降低出错的可能性。
用于变量的数据类型可能会影响该变量进行计算所产生的结果。
在这种情况下,编译器不会产生运行期错误,它只是迫使该值符合数据类型的要求。
这类问题极难查找。
尽量缩小变量的作用域。
如果变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间内仍然占用资源。
它们的主要问题是,任何类中的任何方法都能对它们进行修改,并且很难跟踪究竟是何处进行修改的。
占用资源是作用域涉及的一个重要问题。
对变量来说,尽量缩小作用域将会对应用程序的可靠性产生巨大的影响。
关于常量的命名方法,在jaVa代码中,无论什么时候,均提倡应用常量取代数字、固定字符串。
也就是说,程序中除0,1以外,尽量不应该出现其他数字。
常量可以集中在程序开始部分定义或者更宽的作用域内,名字应该都使用大写字母,并且指出该常量完整含义。
如果一个常量名称由多个单词组成,则应该用下划线“_”来分割这些单词如:
num_days_in_week、max_Value。
篇二:
java命名规范
java项目命名规范20xx-07-2713:
31规范等级说明
级别i:
默认登记要求所有项目中的所有成员遵守。
级别ii:
建议所有项目中的所有成员遵守。
级别iii:
鼓励各个项目根据实际情况执行。
1.格式与命名规范(Formatingandnamingconventions)
1.1缩进
使用tab缩进,而不是空格键--将缩进2,4,8字符的选择权留给阅读者。
1.2换行
每行120字符--因为已是1024*768的年代。
if,for,while语句只有单句时,如果该句可能引起阅读混淆,需要用"
{"
和"
}"
括起来,否则可以省略。
//错误,需要使用花括号{}括起来
if(condition)
if(condition)dosomething();
else
dosomething();
1.3命名规则
遇到缩写如xml时,仅首字母大写,即loadxmldocument()而不是loadxmldocument()
package名必须全部小写,尽量使用单个单词
interface名可以是一个名词或形容词(加上able,ible,orer后缀),如Runnable,accessible。
为了基于接口编程,不采用首字母为i或加上iF后缀的命名方式,如ibookdao,bookdaoiF。
局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)
1.4声明
修饰符应该按照如下顺序排列:
public,protected,private,abstract,static,final,transient,volatile,synchronized,native,strictfp。
类与接口的声明顺序(可用eclipse的source->
sortmembers功能自动排列):
静态成员变量/staticFields
静态初始化块/staticinitializers
成员变量/Fields
初始化块/initializers
构造器/constructors
静态成员方法/staticmethods
成员方法/methods
类型(内部类)/types(innerclasses)
同等的类型,按public,protected,private的顺序排列。
2.注释规范(documentconvertions)
2.1注释类型
2.1.1javadoc注释
略。
2.1.2失效代码注释
由/*...*/界定,标准的c-style的注释。
专用于注释已失效的代码。
/*
*commentoutthecode
*strings="
hello"
;
*system.out.println(s);
2.1.3代码细节注释
由//界定,专用于注释代码细节,即使有多行注释也仍然使用//,以便与用/**/注释的失效代码分开
除了私有变量外,不推荐使用行末注释。
classmyclass{
privateintmyField;
//anend-linecomment.
publicvoidmymethod{
//averyverylong
//comment.
if(condition1){
//condition1comment
...
}else{
//elsesconditioncomment
}
2.2注释的格式
注释中的第一个句子要以(英文)句号、问号或者感叹号结束。
javadoc生成工具会将注释中的第一个句子放在方法汇总表和索引中。
为了在javadoc和ide中能快速链接跳转到相关联的类与方法,尽量多的使用@seexxx.myclass,@seexx.myclass#find(string)。
class必须以@author作者名声明作者,不需要声明@version与@date,由版本管理系统保留此信息。
(ii)
如果注释中有超过一个段落,用 分隔。
示例代码以 包裹。
标识(javakeyword,class/method/field/argument名,constants)以包裹。
标识在第一次出现时以{@linkxxx.myclass}注解以便javadoc与ide中可以链接。
2.3注释的内容
2.3.1可精简的注释内容
注释中的每一个单词都要有其不可缺少的意义,注释里不写"
@paramname-名字"
这样的废话。
如果该注释是废话,连同标签删掉它,而不是自动生成一堆空的标签,如空的@paramname,空的@return。
2.3.2推荐的注释内容
对于api函数如果存在契约,必须写明它的前置条件(precondition),后置条件(postcondition),及不变式(invariant)。
对于调用复杂的api尽量提供代码示例。
对于已知的bug需要声明。
2.3.3null规约
如果方法允许null作为参数,或者允许返回值为null,必须在javadoc中说明。
如果没有说明,方法的调用者不允许使用null作为参数,并认为返回值是nullsafe的。
*获取对象.
*
*@returntheobjecttofoundornullifnotfound.
objectget(integerid){
2.3.4特殊代码注释
代码质量不好但能正常运行,或者还没有实现的代码用//todo:
或//xxx:
声明存在错误隐患的代码用//Fixme:
声明
3.编程规范(programmingconventions)
3.1基本规范
当面对不可知的调用者时,方法需要对输入参数进行校验,如不符合抛出illegalargumentexception,建议使用spring的assert系列函数。
隐藏工具类的构造器,确保只有static方法和变量的类不能被构造
变量定义尽量基于接口而不是具体实现类,如mapmap=newhashmap()
代码中不能使用system.out.println(),e.printstacktrace(),必须使用logger打印信息。
3.2异常处理
重新抛出的异常必须保留原来的异常,即thrownewnewexception("
message"
e);
而不能写成thrownewnewexception("
)。
在所有异常被捕获且没有重新抛出的地方必须写日志。
如果属于正常异常的空异常处理块必须注释说明原因,否
则不允许空的catch块。
框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。
(iii)
3.3代码度量
3.3.1耦合度度量
dac度量值不要不大于7(iii)
解释:
dac(dataabstractioncoupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。
dac度量值表示一个类中有实例化的其它类的个数。
cFo度量值不要不大于20(iii)
cFo(classFanout)类扇出是描述类之间的耦合度的一种代码度量。
cFo度量值表示一个类依赖的其他类的个数。
3.3.2方法度量
方法(构造器)参数在7个以内(ii)
太多的方法(构造器)参数影响代码可读性,还是不良设计的征兆。
考虑用值对象代替这些参数,或者重新设计。
方法长度150行以内(ii)
太长的方法影响代码可读性,还是一个方法承担了太多责任的征兆。
建议拆分责任。
cc度量值不大于10(iii)
cc(cyclomaticcomplexity)圈复杂度指一个方法的独立路径的数量,可以用一个方法内if,while,do,for,catch,switch,case,:
语句与
entitykeykey=newentitykey()
1.4参数的命名
参数的名字和变量的命名规范一致。
1.5数组的命名
数组应该总是用下面的方式来命名:
byte[]buffer;
而不是:
bytebuffer[];
1.6方法的命名
方法的命名以动词和动词短语组成,第一个英文字母必须小写,但有一个例如,以is和has为前缀的方法名。
称就大概知道这个方法的行为。
is和has为前缀的方法返回的都是boolean或booelan.
常见的方法命名:
protectedbooleanhaspostcommiteventlisteners()
privatestaticentitypersistercreate
publicbooleanisadmin()
2.文件样式
2.1package/imports
package行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。
禁止使义应当是类的全称
importjava.util.arraylist;
importjava.util.hashtable;
2.2类和接口
类和接口需要填写注释,一般是用来解释类的职责和使用方法,而且要尽可能的详细。
/**
*aclassrepresentingasetofpacketandbytecounters
*itisobservabletoallowittobewatched,butonly
*reportschangeswhenthecurrentsetiscomplete
*@authorken
publicinterfacedclassdaoextendsgenericdao
2.3成员变量
public的成员变量必须生成文档。
proceted、private和package定义的成员变量如果名字含义明确的话,可以/**
*packetcounters
protectedint[]packets;
2.4构造函数
构造函数应该用递增的方式写(比如:
参数多的写在后面)。
访问控制符("
public"
"
private"
等.)和任何"
stati该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。
publiccounterset(intsize){
this.size=size;
2.5方法
接口的方法默认是public,定义接口方法可以不定义访问控制符号。
类的方法必须指定访问控制符。
所有的方象类的实现方法可以不写。
3.编程惯例
3.1publicprivatefinalprotected使用
任何一个类,接口,方法,变量必须要有访问控制符号,如果是提供给客户程序使用,那么申明为public,如为private.这里有一个原则,尽量使用private,少使用public.
3.2代码中不能出现无用的包和类、变量
具体到eclipse工作区内禁止出现任何红色错误和黄色警告的标记出现。
3.3禁止在一个java文件中编写多个类。
内部类和匿名类除外,但建议少用。
3.4继承一般只能继承抽象类一般不能超过两层继承
继承非抽象类,重载了非抽象方法,在实例的向上转型和向下转型会带来一些意想不到的困扰,建议经验不足证的方法重用,父类方法行为的改变不会通知到子类和子类的客户程序。
多用接口,少用继承。
3.5if,if-else,ifelse-ifelse语句(if,if-else,ifelse-ifelsestatements)
if-else语句应该具有如下格式:
if(condition){
statements;
}elseif(condition){
注意:
if语句总是用
"
括起来,避免使用如下容易引起错误的格式:
if(condition)
statement;
3.5while,if,for,相互嵌套的层次不能超过3层while(true){
if(size>
0){
for(useruser:
userlist){
if(user.name.isempty()){
……..
3.6java代码中不能出现sql和hql
sql和hol在java代码中很难排版和维护,禁止在代码中出现。
stringsql="
selectc.*frommetaone_dclass"
;
sessionsession=getsession(false);
queryquery=session.createsqlquery(sql).addentity(dclass.class);
query.setparameter("
id"
id);
returnquery.list();
3.7禁止直接在控制台打印。
禁止使用system.out.和system.error.,e.printstacktrace()。
请使用log4j来处理。
3.8collection和map之间尽可能避免相互嵌套,禁止相互嵌套超过一层。
map>
>
authorities=aorities();