《代码编写规范》由会员分享,可在线阅读,更多相关《代码编写规范(24页珍藏版)》请在金锄头文库上搜索。
1、王大刚编码规编码规范范1一个软件的生命周期中,80%的花费在于维护几乎没有任何一个软件,在其整个生命同期中,均由最初的开发人员来维护编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新代码如果你将源码作为产品发布,就需要确认它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品编码规编码规范的重要性范的重要性为了执行规范,每个软件开发人员必须一致遵守编码为了执行规范,每个软件开发人员必须一致遵守编码规范。每个人规范。每个人!2本文档反映的是SunMicrosystem公司,Java语言规范中的编码标准部分。主要贡献者包括:PeterKing,PatrickNaughton,Mike
2、DeMoney,JonniKanerva,KathyWalrath以及ScottHommel。版版权权声明声明3统一使用eclipse作为开发工具,避免不同的开发工具格式不一样引起的编码混乱4开开发发工具工具文件名称第一个字母大写,每个单词的第一个字母大写。代码行不要超过2000行.开头要有注释/*Classname*Versioninformation*Date*Copyrightnotice*/5源源文件文件一个制表符作为缩进排版的一个单位尽量避免一行长度超过80个字符换行。当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:在一个逗号后面断开在一个操作符前面断开选择较高级别的(h
3、igher-level)的断开新行应该与上一行同一级别表达式的开头处对齐如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格6排版排版7换换行的例子行的例子someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);var=someMethod1(Expression1,someMethod2(longExpression2,longExpression3);longName1=longName2*(longName3+longName4-lon
4、gNeme5)+4*longName6);privatestaticsynchronizedhorkingLongMethodName(intanArg,ObjectanotherArg,StringyetAnotherArg,ObjectandStillAnother)if(condition1&condition2)|(condition3&condition4)|!(condition5&condition6)doSomethingAboutIt();Java程序有两类注释:实现注释(implementationcomments)和文档注释(documentcomments)。实现注释是
5、那些在C+中见过的,使用/*/和/界定的注释。文档注释(被称为“doccomments”)是Java独有的,并由/*/界定。文档注释可以通过javadoc工具转换成HTML文件实现注释用以注释代码或或者实现细节。文档注释从实现自由(implemtentation-free)的角度描述代码的规范。它可以被那些手头没有源码的开发人员读懂注意注意:频繁的注释有时反映出代码的低质量。当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。8注注释释块注释通常用于提供对文件,方法,数据结构和算法的描述。块注释被置于每个文件的开始处以及每个方法之前块注释之首应该有一个空行,用于把块注释和代码分割开来,比如
6、:/*Hereisablockcomment.*/9块块注注释释短注释可以显示一行内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就用块注释。if(condition)/*Handlethecondition.*/10单单行注行注释释极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中,它们应该具有相同的缩进。if(a=2)returnTRUE;/*specialcase*/elsereturnisPrime(a);/*worksonlyforodda*/11尾端注尾端注释释注释界定符“/”,可以注释掉整行或者一
7、行中的一部分。它一般不用于连续多行的注释文本;if(foo1)/doadouble-filpelsereturnfalse;12行末注行末注释释文档注释描述Java的类、接口、构造器、方法,以及字段(field)。每个文档注释都会被置于注释界定符/*/之中,一个注释对应一个类、接口或成员。该注释应位于声明之前:/*TheExampleclassprovides*/publicclassExample13文档注文档注释释一行一个声明方法与方法之间以空行分隔intlevel;/indentationlevelintsize;/sizeoftableSample(inti,intj)ivar1=i;
8、ivar2=j;intemptyMethod()14声明声明每行至多包含一条语句argv+;argc-;/避免这样使用带返回值的return语句不使用小括号“()”,除非它们以某种方式使返回值更显见。比如:returnmyDisk.size();return(size?size;defaultSize);15语语句句空行将逻辑相关的代码段分隔开,以提高可读性。不同代码块之间应该有空行隔开。紧跟着括号的关键语句应该被空格分开。比如while(true)空格不应该置于方法名与其左括号之间,这将有助于区分关键字和方法调用空白应该位于参数列表中逗号的后面所有的二元运算符,除了“.”,应该使用空格将之与
9、操作数分开。比如:a+=c+d;for语句中的表达式应该被空格分开。比如:for(expr1;expr2;expr3)强制转型后应该跟一个空格。myMethod(byte)aNum,(Object)x);16空白空白命名要做到见名知意使用完整单词,避免缩写词包名全部小写类名是一个名词,采用大小写混合方式,每个单词的首字母大写方法名是一个动词,采用大小写混合方式,第一个单词的首字母小写,其后单词的首字母大写除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的实例变量名应简短且富于描述
10、。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一个临时性变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整形;c,d,e,它们一般用于字符型大小写规则和变量名相似,除了前面需要一个下划线隔开17命名命名规规范范提供对实例以及类变量的访问控制,若没有足够的理由,不要把实例或类类变量声明为public避免用一个对象访问一个类的静态变量和方法。应该用类名替代位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码避免在一个语句中给多个变量赋相同的值不要使用内嵌(embedded)赋值运算符试图提高运行时效率。比如:d=(a=b+c)
11、+r;18编编程程惯惯例例设法让你的程序结构符合目的。例如:if(booleanException)returntrue;elsereturnfalse;应该代之以如下方法:returnbooleanException;类似地:if(condition)returnx;returny;应该写为:return(condition?x:y);19返回返回值值结结构构下面的例子,展示了如何合理布局一个包含单一公共类的Java源程序。接口的布局与其相似。更多信息参见“类和接口”以及“文档注释”20代代码码范例范例21/*(#)Blah.java1.8299/03/18*Copyright(c)1994
12、-199SunMicrosystems,Inc.*901SanAntonioRoad,PaloAlto,California,94303,*U.S.A*Allrightsreserved.*Thissoftwareistheconfidentialandproprietary*informationofSunMicrosystems,Inc.(“Confidential*Information”).YoushallnotdisclosesuchConfidential*Informationandshalluseitonlyinaccordancewiththe*termsofthelicen
13、seagreementyouenteredintowithSun.*/packagejava.blah;importjava.blah.blahdy.BlahBlah;22/*Classdescriptiongoeshere.*verison1.8218Mar1999*authorFirsnameLastname*/publicclassBlahextendsSomeClass/*Aclassimplementationcommentcangohere.*/*classVar1documentationcomment*/publicstaticintclassVar1;/*classVar2d
14、ocumentationcommentthathappentobe*morethanonelinelong*/privatestaticObjectclassVar2;/*instanceVar2documentationcomment*/publicObjectinstanceVar1;23/*instanceVar3documentationcomment*/privateObjectinstanceVar3;/*constructorBlahdocumentationcomment*/publicBlah()/implementationgoeshere/*methoddoSomethingdocumentationcomment*/publicvoiddoSomething()/implementationgoeshere24/*methoddoSomethingElsedocumentation*comment*paramsomeParamdescription*/publicvoiddoSomethingElse(ObjectsomeParam)/implementationgoeshere