Java代码编写规范.docx
- 文档编号:2168391
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:66
- 大小:49.71KB
Java代码编写规范.docx
《Java代码编写规范.docx》由会员分享,可在线阅读,更多相关《Java代码编写规范.docx(66页珍藏版)》请在冰点文库上搜索。
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
本手册的读者对象为Java开发工程师和测试工程师。
商讨
2.4
2.5
对规范如有疑问请及时和技术平台小组联系。
2.6
基本原则
3
以下是开发过程中必须遵循的基本原则,可能缺乏操作性,却是后续规范的概括和总结。
对暂未能列入本编码规范的问题,作一般性要求。
3.1一开始就必须正确的使用规范
3.2
为保证整个产品编码风格的一致性,要求在产品的第一个模块开始,必须严格使用本规范开始编码。
简易性原则
3.3
代码的编写力求简易性,构建类和方法力求简单,提高代码的可读性和可维护性。
清晰性原则
3.4
确保每一个类、接口、方法、变量和对象都有清楚的功能,并解释在何时、何地使用。
设计人员应确保此原则的贯彻执行。
健壮性原则
3.5
程序要健壮,要为错误和异常提供可预见的处理,不能隐藏错误和异常。
效率原则
3.6
编码要兼顾程序运行期效率。
格式规范
4
代码缩进
4.1
所有的语句块内部需要缩进,语句块通常被{}包围,它包括但不仅包括类定义,函数定义,条件分支,循环体
采用两个空格来进行代码缩进,增强可读性,不要使用太多的空格。
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的定义与结构控制的:
⏹
⏹
⏹
⏹
⏹
⏹
⏹
⏹
⏹
⏹
⏹
分解较长的行
4.2
为了确保源代码在打印时仍然可读,限制源代码中行的最大长度,以满足打印的要求,尽量控制在每行不超过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{
...
}
空白区域的使用
4.3
代码中空白区域使用不当,会造成很难阅读和理解,适当的使用空白区域,会使得编写的方法、备注、代码块和表达式清晰易懂。
空格的使用在如下情况下:
⏹定义常量时每一组同类型的常量=号上下对齐
⏹
⏹在“)”或“}”后紧随代码;在代码后紧随“(”或“{”;在“)”后紧随“{”时使用空格:
⏹
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{
...
}
不允许使用TAB
4.4
使用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与空格等价,因此可以使用。
SQL语句书写规范
4.5
SELECT语句书写规则
4.5.1.1
分为两种情况:
关键字用大写,一目了然,如:
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;
insert语句书写规则
4.5.1.2
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)+"')";
update语句的编写规则
4.5.1.3
与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;
delete语句的编写规则。
4.5.1.4
与select语句相似。
当where条件复杂时可以用单独的变量来处理。
每个条件占用一行。
可以采用分行写的方法。
strSQL="deletefromrtamas"+
"wherertanum="+mlngSeqnum+""+
"andplancd='"+mstrPlancd+"',"+
"andcrewno='"+mstrCrewno+"'";
命名规范
5
使用有意义的命名
5.1
在命名一个类、变量、方法或常量时,使用有意义的命名,可提高程序的可读性,避免使用单个字符或通用名字来定义类、变量、方法或常量。
下面例中的变量“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); } 对于经常使用的这种类型的变量,也可以作为标准。 使用术语进行命名 5.2 使用在特定领域的术语来进行命名,例如: 比如使用电力行业术语来命名。 超长命名处理 5.3 对于一个对象的命名必须描述它的使用目的,如果一个类、接口、变量或方法的名字非常长。 那么对应的实体将很难被实现。 面对这种情况,在不减少实际意义的前提下简化实体的命名,首先考虑它的设计目的,分解这个实体,通过更简单的命名来生成新的类、接口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 代码 编写 规范
![提示](https://static.bingdoc.com/images/bang_tan.gif)