Java代码编写要求规范.docx

上传人:b****2 文档编号:779872 上传时间:2023-04-30 格式:DOCX 页数:67 大小:47.10KB
下载 相关 举报
Java代码编写要求规范.docx_第1页
第1页 / 共67页
Java代码编写要求规范.docx_第2页
第2页 / 共67页
Java代码编写要求规范.docx_第3页
第3页 / 共67页
Java代码编写要求规范.docx_第4页
第4页 / 共67页
Java代码编写要求规范.docx_第5页
第5页 / 共67页
Java代码编写要求规范.docx_第6页
第6页 / 共67页
Java代码编写要求规范.docx_第7页
第7页 / 共67页
Java代码编写要求规范.docx_第8页
第8页 / 共67页
Java代码编写要求规范.docx_第9页
第9页 / 共67页
Java代码编写要求规范.docx_第10页
第10页 / 共67页
Java代码编写要求规范.docx_第11页
第11页 / 共67页
Java代码编写要求规范.docx_第12页
第12页 / 共67页
Java代码编写要求规范.docx_第13页
第13页 / 共67页
Java代码编写要求规范.docx_第14页
第14页 / 共67页
Java代码编写要求规范.docx_第15页
第15页 / 共67页
Java代码编写要求规范.docx_第16页
第16页 / 共67页
Java代码编写要求规范.docx_第17页
第17页 / 共67页
Java代码编写要求规范.docx_第18页
第18页 / 共67页
Java代码编写要求规范.docx_第19页
第19页 / 共67页
Java代码编写要求规范.docx_第20页
第20页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java代码编写要求规范.docx

《Java代码编写要求规范.docx》由会员分享,可在线阅读,更多相关《Java代码编写要求规范.docx(67页珍藏版)》请在冰点文库上搜索。

Java代码编写要求规范.docx

Java代码编写要求规范

LiEMS3.0系统

JAVA编码规范

 

南京朗坤软件有限公司

 

©2004年南京朗坤自动化有限公司版权所有

机密文档,XX,不得外传

文档类型:

编码规范

 

作者:

技术平台小组

 

南京朗坤软件有限公司

南京市江宁区铜山金铜路2号

211156

电话:

+862586192500

传真:

+862586192503

Web:

 

日期:

2004年8月31日

 

版本:

1.0

 

客户:

 

发布人员:

文档审核:

 

文档批准:

:

________________________________年___月___日

 

:

________________________________年___月___日

 

:

________________________________年___月___日

修正记录

 

版本

日期

作者

修改描述

1.0

2004-8-31

技术平台小组

初稿

 

 

 

 

 

 

 

 

1概述

2

2.1背景

2.2

程序的编码是一个创造性极强的工作,虽然要奇思妙想,但也必须要遵守一定的规则和限制,编码风格的重要性对大型软件项目开发来说是不言而喻的。

Liems3产品开发基于Java语言J2EE技术路线,为了规范Java编码、提高编码质量、增强代码的可读性和可维护性特制定本规范。

开发工程师在开发过程中必须遵守本规范,规范是代码编写及代码验收等管理环节中必须执行的标准。

2.3读者对象

2.4

本手册的读者对象为Java开发工程师和测试工程师。

2.5商讨

2.6

对规范如有疑问请及时和技术平台小组联系。

3基本原则

4

以下是开发过程中必须遵循的基本原则,可能缺乏操作性,却是后续规范的概括和总结。

对暂未能列入本编码规范的问题,作一般性要求。

4.1一开始就必须正确的使用规范

4.2

为保证整个产品编码风格的一致性,要求在产品的第一个模块开始,必须严格使用本规范开始编码。

4.3简易性原则

4.4

代码的编写力求简易性,构建类和方法力求简单,提高代码的可读性和可维护性。

4.5清晰性原则

4.6

确保每一个类、接口、方法、变量和对象都有清楚的功能,并解释在何时、何地使用。

设计人员应确保此原则的贯彻执行。

4.7健壮性原则

4.8

程序要健壮,要为错误和异常提供可预见的处理,不能隐藏错误和异常。

4.9效率原则

4.10

编码要兼顾程序运行期效率。

5格式规范

6

6.1代码缩进

6.2

所有的语句块内部需要缩进,语句块通常被{}包围,它包括但不仅包括类定义,函数定义,条件分支,循环体

采用两个空格来进行代码缩进,增强可读性,不要使用太多的空格。

classMyClass{

..voidfunction(intarg){

....if(arg<0){

......for(intindex=0;index<=arg;index++){

........//......

......}

....}

..}

}

另外,在程序块中,对于一个用于处理循环的结构,也要使用缩进,以突出结构显示:

voidfuncition(intarg){

..loop:

....for(intindex=0;index<=arg;index++){

......switch(index){

........case0:

..........//..

..........breakloop;//退出语句

........default;

..........//..

..........break;//退出switch

......}

....}

}

在每一个代码块中,对于最后字符为”{”的一行,在”{”前加上空格;”}”独占一行,同时首字符与这个代码块对齐。

下面的例子阐明运用这条规则是如何来进行JAVA的定义与结构控制的:

 

 

 

 

 

 

 

 

 

 

 

 

6.3分解较长的行

6.4

为了确保源代码在打印时仍然可读,限制源代码中行的最大长度,以满足打印的要求,尽量控制在每行不超过80个字符,每行不允许超过100字符。

1.不允许在一行上编写多个表达式:

错误:

doublex=Math.random();doubley=Math.random();//太长!

正确

doublex=Math.random();

doubley=Math.random();

2.如果存在复杂的表达式:

doublelength=Math.sqrt(Math.pow(Math.random),2.0)+Math.pow(Math

.random(),2.0));//太长

不要为了断行将非公共的变量提取出来,这样将增加执行的时间,对这种情况,可以在+号附近将它断开成两行,如Doublelength=Math.sqrt(Math.pow(Math.random),2.0)

+Math.pow(Math.random(),2.0));

对于这样一种情况,将复杂的表达式分解成小的表达式,并将小的表达式的值用临时变量来进行处理。

doublexSquared=Math.pow(Math.randow(),2.0);

doubleySquared=Math.pow(Math.randow(),2.0);

doublelength=Math.sqrt(xSquared+ySquared);

最后,对于不能按照上面两种方式进行处理的较长的行,通过回车换行来进行处理:

⏹方法一

在一行中,存在一个或多个逗号:

doublelength=Math.sqrt(Math.pow(x,2.0),Math.pow(y,2.0));//太长

采用这样的方式来进行处理:

按照逗号来进行换行处理,并与第一个逗号表达式对齐。

doublelength=Math.sqrt(Math.pow(x,2.0),

Math.pow(y,2.0));

⏹方法二

如不存在逗号:

classMyclass{

privateintfield;

...

Booleanequals(Objectobj){

returnthis==obj||(objinstanceofMyClass&&this.field

==obj.field);//太长!

}

...

}

这种情况下,建议采用最低优先级的操作来进行划分,或是存在一个比“等于”高的优先级操作来进行划分:

classMyclass{

privateintfield;

...

Booleanequals(Objectobj){

returnthis==obj

||(objinstanceofMyClass&&this.field==obj.field);

}

...

}

 

⏹方法三

在需要的时候,重复应用方法一和方法二,直到每一行代码都小于最大的允许的长度。

对于函数的定义,太长时折行,优先将throws子句断行,其次将类似参数尽量位于同一行,如

PublicvoiddrawRect(intx,inty,Intwidth,intheight,intcolor)

throwsException{

...

}

6.5空白区域的使用

6.6

代码中空白区域使用不当,会造成很难阅读和理解,适当的使用空白区域,会使得编写的方法、备注、代码块和表达式清晰易懂。

空格的使用在如下情况下:

⏹定义常量时每一组同类型的常量=号上下对齐

⏹在“)”或“}”后紧随代码;在代码后紧随“(”或“{”;在“)”后紧随“{”时使用空格:

for.(...).{

...

}

 

while.(...).{

...

}

 

do.{

...

}.while.(...);

 

switch.(...).{

...

}

 

if.(...).{

...

}

else.if.(...).{

...

}

else.{

...

}

 

try.{

...

}

catch.(...).{

...

}

finally.{

...

}

 

⏹对于二元操作,除了“.”操作符外,使用空格

doublelength=Math.sqrt(x*x+y*y);

doublexNorm=length>0.0?

(x/length):

x;

空白行使用在下列情况下:

对于负号的情况,如果之后为长表达式,按二元操作符的要求补空格,如

inta=-3(没有空格)

inta=-a+3(补一个空格)

⏹方法实现中的每一个逻辑块:

voidhandleMessage(Messagemessage){

 

DataInputcontent=message.getDateInput();

IntmessageType=content.readInt();

 

Switch(messageType){

caseWARNING:

...处理...

break;

 

caseERROR:

...处理...

break;

 

default:

...处理...

break;

}

}

 

⏹类和接口的成员定义

publicclassFoo{

 

/**

*定义一个内部类

*/

classInnerFoo{

...

}

/**

*成员Bar.

*/

privateBarbar;

 

/**

*用指定的Bar构建一个Foo/

*/

Foo(Barbar){

this.bar=bar;

}

}

⏹源代码文件中每个类和接口的定义

/*

*...文件描述...

*/

 

packagepany.xyz;

 

/**

*...接口描述...

*/

interfaceFooInterface{

...

}

 

/**

*...类描述...

*/

publicclassFooimplementsFooInterface{

...

}

6.7不允许使用TAB

6.8

使用TAB键来进行源代码的缩进和排列可能对环境的依赖很强,在原始开发环境中显示正常格式的代码,转换到不能很好的支持TAB键的环境中时,代码将失去原有的格式。

TAB=8space的效果:

privatefinalintEXAMPLE_1=2;

privatefinalintEXAMPLE_TAB_LONG_NAME=4;

而在TAB=4space的效果

privatefinalintEXAMPLE_1=2;

privatefinalintEXAMPLE_TAB_LONG_NAME=4;

原本的对齐效果失去了意义

提示:

JbuilderX中支持将Tab转换为固定空格,因此可以认为在JBuilder中TAB与空格等价,因此可以使用。

6.9SQL语句书写规范

6.10

6.10.1.1SELECT语句书写规则

6.10.1.2

分为两种情况:

关键字用大写,一目了然,如:

SELECTcount(*)ascounterFROMctrmas,select语句的选择字段需要详细,原则上不鼓励使用select*from,而应该书写具体的字段名,以免表结构变更带来兼容性问题。

⏹对于简单的Select语句可以使用一个变量来写完:

strSql="selectcount(*)ascounterfromctrmas";

⏹对于复杂的select语句使用连个变量完成一条语句,要求每个字段、每个where中的条件作为一行方便阅读,

在每行的前面加一个空格。

同时要求每行的字段对齐,SQL关键字对齐。

例1:

strFrom="selectdistinct(asgmas.empnum),"+

"empmas.shtnam"+

"fromasgmas,outerempmas";

不允许下面的写法,上面的语句能被编译器优化为常量字符串,下面的语句会被处理成4条语句,要构造3次StringBuffer。

strFrom="";

strFrom=strFrom+“selectdistinct(asgmas.empnum),";

strFrom=strFrom+"empmas.shtnam";

strFrom=strFrom+"fromasgmas,outerempmas";

例2:

strWhere="whereasgmas.crewno='"+mstrPKey+"'"+

"andasgmas.empnumisnotnull"+

"andempmas.empnum=asgmas.empnum"+

"orderbyshtnam";

 

或用下面写法

strWhere="";

strWhere=strWhere+"whereasgmas.crewno='"+mstrPKey+"'";

strWhere=strWhere+"andasgmas.empnumisnotnull";

strWhere=strWhere+"andempmas.empnum=asgmas.empnum";

strWhere=strWhere+"orderbyshtnam";

3)

strSQL=strFrom+strWhere;

6.10.1.3insert语句书写规则

6.10.1.4

insert语句的编写规则,必须列出所有要插入的字段。

每个字段的值占用一行,方便阅读与检查。

strSQL="insertintortamas"+

"(rtanum,avltyp,effdat,expdat,begtim,endtim,enttyp,plancd,crewno,skilcd,empnum,unvcod,shtnam,qtyval,lstusr,lstdtm,fstusr,fstdtm)"+

"values("+

mlngSeqnum+",'"+

mstrAvltyp+"','"+

FormatDBDate(mdtmDatefr)+"','"+

FormatDBDate(mdtmDateto)+"','"+

Format(mdtmTimefr,"hh:

mm:

ss")+"','"+

Format(mdtmTimeto,"hh:

mm:

ss")+"',"+

"'EM','"+

mstrPlancd+"','"+

mstrCrewno+"','"+

mstrSkilcd+"','"+

mstrEmpnum+"','"+

mstrUnvcod+"','"+

Trim(ReplaceChar(mstrDescription,"'",""))+"',"+

"1,"+

"'WB','"+

FormatDBDateTime(Now)+"',"+

"'WB','"+

FormatDBDateTime(Now)+"')";

也可以每行分开写,如:

strSQL="";

strSQL=strSQL+"insertintortamas";

strSQL=strSQL+"(rtanum,avltyp,effdat,expdat,begtim,endtim,enttyp,plancd,crewno,skilcd,empnum,unvcod,shtnam,qtyval,lstusr,lstdtm,fstusr,fstdtm)";

strSQL=strSQL+"values(";

strSQL=strSQL+mlngSeqnum+",'";

strSQL=strSQL+mstrAvltyp+"','";

strSQL=strSQL+FormatDBDate(mdtmDatefr)+"','";

strSQL=strSQL+FormatDBDate(mdtmDateto)+"','";

strSQL=strSQL+Format(mdtmTimefr,"hh:

mm:

ss")+"','";

strSQL=strSQL+Format(mdtmTimeto,"hh:

mm:

ss")+"',";

strSQL=strSQL+"'EM','";

strSQL=strSQL+mstrPlancd+"','";

strSQL=strSQL+mstrCrewno+"','";

strSQL=strSQL+mstrSkilcd+"','";

strSQL=strSQL+mstrEmpnum+"','";

strSQL=strSQL+mstrUnvcod+"','";

strSQL=strSQL+Trim(ReplaceChar(mstrDescription,"'",""))+"',";

strSQL=strSQL+"1,";

strSQL=strSQL+"'WB','";

strSQL=strSQL+FormatDBDateTime(Now)+"',";

strSQL=strSQL+"'WB','";

strSQL=strSQL+FormatDBDateTime(Now)+"')";

6.10.1.5update语句的编写规则

6.10.1.6

与insert语句相似,对于一行必须只能给一个字段的赋值。

但是当where条件复杂时可以用单独的变量来处理,同样也可以采用分行写的方法。

strSQL="updatertamassetavltyp='"+mstrAvltyp+"',"+

"effdat='"+FormatDBDate(mdtmDatefr)+"',"+

"expdat='"+FormatDBDate(mdtmDateto)+"',"+

"begtim='"+Format(mdtmTimefr,"hh:

mm:

ss")+"',"+

"endtim='"+Format(mdtmTimeto,"hh:

mm:

ss")+"',"+

"plancd='"+mstrPlancd+"',"+

"crewno='"+mstrCrewno+"',"+

"skilcd='"+mstrSkilcd+"',"+

"empnum='"+mstrEmpnum+"',"+

"unvcod='"+mstrUnvcod+"',"+

"shtnam='"+mstrDescription+"',"+

"lstusr='WB',"+

"lstdtm='"+FormatDBDateTime(Now)+"'"+

"wherertanum="+mlngSeqnum;

6.10.1.7delete语句的编写规则。

6.10.1.8

与select语句相似。

当where条件复杂时可以用单独的变量来处理。

每个条件占用一行。

可以采用分行写的方法。

strSQL="deletefromrtamas"+

"wherertanum="+mlngSeqnum+""+

"andplancd='"+mstrPlancd+"',"+

"andcrewno='"+mstrCrewno+"'";

7命名规范

8

8.1使用有意义的命名

8.2

在命名一个类、变量、方法或常量时,使用有意义的命名,可提高程序的可读性,避免使用单个字符或通用名字来定义类、变量、方法或常量。

下面例中的变量“a”和常量“65”的意义就不清楚。

if(a<65){//“a”描述的意义是什么

y=65–a;

}

else{

y=0;

}

通过定义有意义的命名,修改后的代码就比较易懂。

if(age

yearsToRetriement=RETIREMENT_AGE–age;

}

else{

yearToRetirement=0;

}

对于那些能够提供足够的信息来决定其目的的临时变量,可以不使用这种规则,如下面代码中的用于循环计数或索引的变量:

for(inti=0;i

enrollStudent(i);

}

对于经常使用的这种类型的变量,也可以作为标准。

 

8.3使用术语进行命名

8.4

使用在特定领域的术语来进行命名,例如:

比如使用电力行业术语来命名。

8.5超长命名处理

8.6

对于一个对象的命名必须描述它的使用目的,如果一个类、接口、变量或方法的名字非常长。

那么对应的实体将很难被实现。

面对这种情况,在不减少实际意义的前提下简化实体的命名,首先考虑它的设计目的,分解这个实体,通过更简单的命名来生成新的类、接口、方法和变量。

8.7保留元音

8.8

如果多个有

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2