您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > linux/Unix相关 > Java编程规范
广州兰贝斯Java编码规范Java编码规范制定本编程格式的目的是为了使软件可读性好、兼容性好、易维护等等。注:加(*)者为重要保证要求。一、命名规范1.1Package的命名(*)Package的名字应由一个小写单词组成。为了保证包的唯一性,一般以公司国际域名开头。例如:com.elanbase.db。1.2Class的命名(*)Class的名字必须由大写字母开头,并且其它单词的首写字母也要大写。例如:DbAccess。1.3Class成员属性及变量的命名(*)变量/成员属性的名字用一个小写字母开头,后面的单词以大写字母开头。例如:privateStringlastName;1.4常量的命名(*)Java里的常量,是用staticfinal修饰的,应该用全大写加下划线命名,并且常量名应尽量指出完整含义。如:publicstaticfinalStringORACLE_DB_DRIVER=oracle.jdbc.driver.OracleDriver;1.5数组的命名数组应该总是用下面的形式来命名:byte[]buffs;而不是:bytebuffs[];1.6方法的参数和变量的命名规范一致,且应使用有意义的参数命名,如果可能的话,使用和要赋值的属性一样的名字,如:setCounter(intsize){广州兰贝斯Java编码规范this.size=size;}1.7方法命名(*)用一个小写字母开头,后面的单词以大写字母开头。应意义明确,对于属性的存取方法,应使用getXXX()和setXXX()名称,以isXXX(),hasXXX()来命名返回值为boolean类型的方法。1.8一般命名注意事项a.用有意义的名字命名变量首先,用完整的英语单词或约定俗成的简写命名变量,鼓励多用约定俗成的简写命名变量。例如:publicStringzipCodepublicinterrNob.用复数命名Collection类变量Collection,包括数组,Vector等。命名时使用复数:例如:publicCollectioncustomers二、Java源文件样式Java(*.java)源文件应遵守如下的样式规则2.1Class代码布局:packageJavadoc注释或者其它文件头注释类声明Fields声明空行构造函数空行克隆方法空行其它方法(不包括main)空行广州兰贝斯Java编码规范内部(Inner)类空行main()方法2.2版权信息版权信息必须在java文件的开头,例如:/***pTitle:编码过滤器/p*pDescription:该类实现把request请求编码为web.xml文件中所配置的字符集/p*pCopyright:Copyright(c)2003/p*pCompany:兰贝斯信息科技/p*@author曾小平*@version1.0*/2.3Package/Imports(*)package行要在版权信息之前,中间空一行。将import的classes归类,按顺序罗列:a.Java标准类(java.*)b.Java扩充类(javax.*)c.第三方类d.你的应用程序的类每一类空一行。注意在第三方类里进行注释,说明它们的来源。如果import行中包含了同一个包中的多个类,不推荐用importpakage.*来处理,推荐把要用的类一一import出来。这样程序用到哪些类就可以非常清楚的看出来,有利于代码的维护,增强了代码的可读性。例如:importjava.util.Observable;importjava.util.Date;importjavax.sql.Connection;//ApacheXerces广州兰贝斯Java编码规范importorg.apache.xml.*;importorg.apache.xerces.dom.*;//Applicationclassesimportcom.elanbase.db.DbAccess2.4ClassFields类的成员变量:/***Packetcounters*/protectedint[]packets;public的成员变量必须以生成文档(JavaDoc)的方式进行注释(/**…*/)。protected、private和package定义的成员变量如果名字含义明确的话,可以没有注释。Field定义可遵从以下顺序:a.public常量b.public变量c.protected常量d.protected变量e.package常量f.package变量g.private常量h.private变量2.5存取方法(getter,setter)接下来是类成员变量的存取的方法。2.6构造方法(*)重载的构造方法应该用递增的方式写(参数多的写在后面)。publicCounterSet(){this(10);}publicCounterSet(intsize){this.size=size;}广州兰贝斯Java编码规范2.7克隆方法如果这个类是可以被克隆的,就应实现clone方法:publicObjectclone(){try{CounterSetobj=(CounterSet)super.clone();obj.packets=(int[])packets.clone();obj.size=size;returnobj;}catch(CloneNotSupportedExceptione){thrownewInternalError(UnexpectedCloneNotSUpportedException:+e.getMessage());}}2.8类方法下面开始写类方法:/***Setthepacketcounters*(suchaswhenrestoringfromadatabase)*/protectedfinalvoidsetArray(int[]r1,int[]r2,int[]r3,int[]r4)throwsIllegalArgumentException{////Ensurethearraysareofequalsize//if(r1.length!=r2.length||r1.length!=r3.length||r1.length!=r4.length)thrownewIllegalArgumentException(Arraysmustbeofthesamesize);System.arraycopy(r1,0,r3,0,r1.length);System.arraycopy(r2,0,r4,0,r1.length);}2.9toString方法每一个类都最好定义toString方法:publicStringtoString(){Stringretval=CounterSet:;广州兰贝斯Java编码规范for(inti=0;idata.length();i++){retval+=data.bytes.toString();retval+=data.packets.toString();}returnretval;}2.10main方法(*)如果类中包含main(String[])方法,那么它应该写在类的底部。三、代码编写风格3.1代码格式代码应该用unix的格式,而不是windows的(比如:回车变成回车+换行)。3.2文档化(*)必须遵守javadoc风格来为源程序写注释。不仅因为它是标准,这也是被各种java编译器都认可的方法。3.3缩进(*)缩进采用4个空格(2个太少不明显,8个太多占空间)。不要在源文件中保存Tab字符(!!)。在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而显示为不同的宽度。例如:在Jbuilder7中作如下设置:在ToolsEditorOptionsEditor面板上修改BlockIndent为4,TabSize为4。3.4行宽行宽应该设置为80字符。源代码一行一般不应超过这个宽度,这会导致无法完整显示。但这一设置也可以灵活调整。超长的语句应该在一个逗号后或者一个操作符前折行。一条语句折行后,应该根据实际情况进行缩进,总的原则是代码看起来清楚整洁。3.5折行(*)需要折行时应遵循如下原则:·在逗号后。·在操作符前。·高级别优先(例1)。广州兰贝斯Java编码规范·第二行做两次缩进,第三行与第二行对齐。例1:longName1=longName2*(longName3+longName4-longName5)+4*longname6;//推荐使用longName1=longName2*(longName3+longName4-longName5)+4*longname6;//避免使用例2//均缩进8个空格以避免很深的缩进privatestaticsynchronizedhorkingLongMethodName(intanArg,ObjectanotherArg,StringyetAnotherArg,ObjectandStillAnother){//下一层语句4空格缩进}//避免此种缩进if((condition1&&condition2)||(condition3&&condition4)||!(condition5&&condition6)){//此折行方式不佳doSomethingAboutIt();//此行不易读}//应用此种断行/缩进方式if((condition1&&condition2)||(condition3&&condition4)||!(condition5&&condition6)){doSomethingAboutIt();}//或此种折行/缩进方式if((condition1&&condition2)||(condition3&&condition4)||!(condition5&&condition6)){doSomethingAboutIt();}三重表达式可用以下缩进方式:alpha=(aLongBooleanExpression)?beta:gamma;广州兰贝斯Java编码规范或:alpha=(aLongBooleanExpression)?beta:gamma;或:alpha=(aLongBooleanExpression)?beta:gamma;3.6变量声明推荐一行只写一行变量声明语句,这样有助于写注释。如:intlevel;//indentationlevelintsize;//sizeoftable是推荐的,而要避免:intlevel,size;的写法。此外,要杜绝不同类型变量写在一行的错误:intfoo,fooarray[];3.7{}对{}中的语句应该单独作为一行,并采用如下风格:if(i0){i++;};//正确,{单独作为一行不推荐使用:if(i0){i++};//错误,{和}在同一行或if(i0){//错误,‘{’应在上一行末尾。i++;}}语句永远单独作为一行。广州兰贝斯Java编码规范3.8ifelse语句(*)多条件连续判断语句应按以下格式书写:if(…){…}elseif(…){…}else{…}应注意if语句总应使用括号,要避免以下容易出错的写法:if(condition)//避免。此处略去了{}!statement;或if(condition)statement;3.9括号左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格。下面的例子说明括号和空格的错误及正确使用:CallProc(AParameter);//错误CallProc(AParameter);//正确不要在语句中使用无意义的括号。括号只应该为达到某种目的(如语法要求或增加程序可读性)而出现在源代码中。下面的例子说明错误和正确的用法:if((I)==42){//错误,括号毫无意义if((I==42)or(J==42)){//正确,的确需要括号3.10语句每行只能包括一句代码。如:argv++;//
本文标题:Java编程规范
链接地址:https://www.777doc.com/doc-7028234 .html