java编码规范文档.docx

上传人:b****1 文档编号:14008625 上传时间:2023-06-20 格式:DOCX 页数:19 大小:22.30KB
下载 相关 举报
java编码规范文档.docx_第1页
第1页 / 共19页
java编码规范文档.docx_第2页
第2页 / 共19页
java编码规范文档.docx_第3页
第3页 / 共19页
java编码规范文档.docx_第4页
第4页 / 共19页
java编码规范文档.docx_第5页
第5页 / 共19页
java编码规范文档.docx_第6页
第6页 / 共19页
java编码规范文档.docx_第7页
第7页 / 共19页
java编码规范文档.docx_第8页
第8页 / 共19页
java编码规范文档.docx_第9页
第9页 / 共19页
java编码规范文档.docx_第10页
第10页 / 共19页
java编码规范文档.docx_第11页
第11页 / 共19页
java编码规范文档.docx_第12页
第12页 / 共19页
java编码规范文档.docx_第13页
第13页 / 共19页
java编码规范文档.docx_第14页
第14页 / 共19页
java编码规范文档.docx_第15页
第15页 / 共19页
java编码规范文档.docx_第16页
第16页 / 共19页
java编码规范文档.docx_第17页
第17页 / 共19页
java编码规范文档.docx_第18页
第18页 / 共19页
java编码规范文档.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java编码规范文档.docx

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

java编码规范文档.docx

java编码规范文档

Java代码标准

1.标识符命名标准

1.1简洁

简洁是指,在统一和达意的前提下,用尽量少的标识符。

如果不能达意,宁愿不要简洁。

比方:

theOrderNameOfTheTargetSupplierWhichIsTransfered太长,transferedTargetSupplierOrderName那么较好,但是transTgtSplOrdNm就不好了。

省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。

1.2英文vs拼音

尽量使用通俗易懂的英文单词,如果不会可以向队友求助,实在不行那么使用汉语拼音,防止拼音与英文混用。

比方表示归档,用archive比拟好,用pigeonhole那么不好,用guiDang尚可接受。

1.3包名

使用小写字母如com.xxx.settlment,不要com.xxx.Settlement

单词间不要用字符隔开,比方com.xxx.settlment.jsfutil,而不要com.xxx.settlement.jsf_util

1.4类名

1.4.1首字母大写

类名要首字母大写,比方SupplierService,PaymentOrderAction;不要supplierService,paymentOrderAction.

1.5方法名

首字母小写,如addOrder()不要AddOrder()

动词在前,如addOrder(),不要orderAdd()

名称不要太长

动词前缀往往表达特定的含义,如下表:

前缀名

意义

举例

create

创立

createOrder()

delete

删除

deleteOrder()

add

创立,暗示新创立的对象属于某个集合

addPaidOrder()

remove

删除

removeOrder()

init或那么initialize

初始化,暗示会做些诸如获取资源等特殊动作

initializeObjectPool

destroy

销毁,暗示会做些诸如释放资源的特殊动作

destroyObjectPool

open

翻开

openConnection()

close

关闭

closeConnection()<

read

读取

readUserName()

write

写入

writeUserName()

get

获得

getName()

set

设置

setName()

prepare

准备

prepareOrderList()

copy

复制

copyCustomerList()

modity

修改

modifyActualTotalAmount()

calculate

数值计算

calculateCommission()

do

执行某个过程或流程

doOrderCancelJob()

dispatch

判断程序流程转向

dispatchUserRequest()

start

开始

startOrderProcessing()

stop

结束

stopOrderProcessing()

send

发送某个消息或事件

sendOrderPaidMessage()

receive

接受消息或时间

receiveOrderPaidMessgae()

respond

响应用户动作

responseOrderListItemClicked()

find

查找对象

findNewSupplier()

update

更新对象

updateCommission()

find方法在业务层尽量表达业务含义,比方findUnsettledOrders(),查询未结算订单,而不要findOrdersByStatus()。

数据访问层,find,update等方法可以表达要执行的sql,比方findByStatusAndSupplierIdOrderByName(Status.PAID,345)

1.6域〔field〕名

1.6.1静态常量

全大写用下划线分割,如

publicstaticfindStringORDER_PAID_EVENT=“ORDER_PAID_EVENT〞;

1.6.2枚举

全大写,用下划线分割,如

publicenumEvents{

ORDER_PAID,

ORDER_CREATED

}

1.6.3其他

首字母小写,骆驼法那么,如:

publicStringorderName;

1.7局部变量名

参数和局部变量名首字母小写,骆驼法那么。

尽量不要和域冲突,尽量表达这个变量在方法中的意义。

2.代码格式

用空格字符缩进源代码,不要用tab,每个缩进4个空格。

2.1包的导入

删除不用的导入,尽量不要使用整个包的导入。

在eclipse下经常使用快捷键ctrl+shift+o修正导入。

2.2域格式

每行只能声明一个域。

域的声明用空行隔开。

2.3代码块格式

2.4.1缩进风格

大括号的开始在代码块开始的行尾,闭合在和代码块同一缩进的行首,例如:

packagecom.test;

 

publicclassTestStyleextendsSomeClassimplementsAppleInter,BananaInter{

publicstaticfinalStringTHIS_IS_CONST="CONSTVALUE";

 

privatestaticvoidmain(String[]args){

intlocalVariable=0;

}

 

publicvoidcompute(Stringarg){

if(arg.length()>0){

System.out.println(arg);

}

 

for(inti=0;i<10;i++){

System.out.println(arg);

}

 

while(condition){

 

}

 

do{

otherMethod();

}while(condition);

 

switch(i){

case0:

callFunction();

break;

case1:

callFunctionb();

break;

default:

break;

}

}

}

2.4.2空格的使用

2.4.2.1表示分割时用一个空格

不能这样:

if(a>b){

//dosomethinghere

};

2.4.2.2二元三元运算符两边用一个空格隔开

如下:

a+b=c;

b-d=e;

returna==b?

1:

0;

不能如下:

a+b=c;

b-d=e;

returna==b?

1:

0;

2.4.2.3逗号语句后如不换行,紧跟一个空格

如下:

call(a,b,c);

不能如下:

call(a,b,c);

2.4.3空行的使用

空行可以表达代码在语义上的分割,注释的作用范围,等等。

将类似操作,或一组操作放在一起不用空行隔开,而用空行隔开不同组的代码,如图:

order=orderDao.findOrderById(id);

 

//updateproperties

order.setUserName(userName);

order.setPrice(456);

order.setStatus(PAID);

 

orderService.updateTotalAmount(order);

 

 

session.saveOrUpdate(order);

上例中的空行,使注释的作用域很明显.

∙连续两行的空行代表更大的语义分割。

∙方法之间用空行分割

∙域之间用空行分割

∙超过十行的代码如果还不用空行分割,就会增加阅读困难

3注释标准

3.1注释vs代码

∙注释宜少二精,不宜多而滥,更不能误导

∙命名达意,结构清晰,类和方法等责任明确,往往不需要,或者只需要很少注释,就可以让人读懂;相反,代码混乱,再多的注释都不能弥补。

所以,应领先在代码本身下功夫。

∙不能正确表达代码意义的注释,只会损害代码的可读性。

∙过于详细的注释,对显而易见的代码添加的注释,罗嗦的注释,还不如不写。

∙注释要和代码同步,过多的注释会成为开发的负担

∙注释不是用来管理代码版本的,如果有代码不要了,直接删除,svn会有记录的,不要注释掉,否那么以后没人知道那段注释掉的代码该不该删除。

3.2JavaDoc

说明类、域和方法等的意义和用法等的注释,要以javadoc的方式来写。

JavaDoc是个类的使用者来看的,主要介绍是什么,怎么用等信息。

但凡类的使用者需要知道,都要用JavaDoc来写。

非JavaDoc的注释,往往是个代码的维护者看的,着重告述读者为什么这样写,如何修改,注意什么问题等。

如下:

/**

*Thisisaclasscomment

*/

publicclassTestClass{

/**

*Thisisafieldcomment

*/

publicStringname;

 

/**

*Thisisamethodcomment

*/

publicvoidcall(){

 

}

}

3.3块级别注释

3.3.1块级别注释,单行时用//,多行时用/*..*/。

3.3.2较短的代码块用空行表示注释作用域

3.3.3较长的代码块要用

/*------start:

------*/

/*--------end:

-------*/

包围

如:

/*----------start:

订单处理-------*/

//取得dao

OrderDaodao=Factory.getDao("OrderDao");

/*查询订单*/

Orderorder=dao.findById(456);

//更新订单

order.setUserName("uu");

order.setPassword("pass");

order.setPrice("ddd");

orderDao.save(order);

/*----------end:

订单处理-------*/

3.3.4可以考虑使用大括号来表示注释范围

使用大括号表示注释作用范围的例子:

/*----------订单处理-------*/

{

//取得dao

OrderDaodao=Factory.getDao("OrderDao");

/*查询订单*/

Orderorder=dao.findById(456);

 

//更新订单

order.setUserName("uu");

order.setPassword("pass");

order.setPrice("ddd");

 

orderDao.save(order);

}

3.4行内注释

行内注释用//写在行尾

4最正确实践和禁忌

4.1每次保存的时候,都让你的代码是最美的

程序员都是懒惰的,不要想着等我完成了功能,再来优化代码的格式和结构,等真的把功能完成,很少有人会再愿意回头调整代码。

4.2使用log而不是System.out.println()

log可以设定级别,可以控制输出到哪里,容易区分是在代码的什么地方打印的,而System.out.print那么不行。

而且,System.out.print的速度很慢。

所以,除非是有意的,否那么,都要用log。

至少在提交到svn之前把System.out.print换成log。

4.3每个ifwhilefor等语句,都不要省略大括号{}

看下面的代码:

if(a>b)

a++;

如果在以后维护的时候,需要在a>b时,把b++,一步小心就会写成:

if(a>b)

a++;

b++;

这样就错了,因为无论a和b是什么关系,b++都会执行。

如果一开始就这样写:

if(a>b){

a++;

}

相信没有哪个笨蛋会把b++添加错的。

而且,这个大括号使作用范围更明显,尤其是后面那行很长要折行时。

4.4善用TODO:

在代码中参加//TODO:

,大局部的ide都会帮你提示,让你知道你还有什么事没有做。

比方:

if(order.isPaid()){

//TODO:

更新订单

}

4.5在需要留空的地方放一个空语句或注释,告述读者,你是成心的

比方:

if(!

exists(order)){

;

}

或:

if(!

exists(order)){

//nothingtodo

}

4.6不要再对boolean值做truefalse判断

比方:

if(order.isPaid()==true){

//Dosomethinghere

}

不如写成:

if(order.isPaid()){

//Dosomethinghere

}

后者读起来就很是iforderispaid,….要比iforder’sisPaidmethodreturnstrue,…更容易理解

4.7减少代码嵌套层次

代码嵌套层次达3层以上时,一般人理解起来都会困难。

下面的代码是一个简单的例子:

publicvoiddemo(inta,intb,intc){

if(a>b){

if(b>c){

doJobA();

}elseif(b

doJobB()

}

}else{

if(b>c){

if(a

doJobC();

}

}

}

}

减少嵌套的方法有很多:

∙合并条件

∙利用return以省略后面的else

∙利用子方法

比方上例,合并条件后成为:

publicvoiddemo(inta,intb,intc){

if(a>b&&b>c){

doJobA();

}

if(a>b&&c>b){

doJobB();

}

if(a<=b&&c

doJobC();

}

}

如果利用return那么成为:

publicvoiddemo(inta,intb,intc){

if(a>b){

if(b>c){

doJobA();

return;

}

doJobB()

return;

}

 

if(b>c){

if(a

doJobC();

}

}

}

利用子方法,就是将嵌套的程序提取出来放到另外的方法里。

4.8程序职责单一

关注点别离是软件开发的真理。

人类自所以能够完成复杂的工作,就是因为人类能够将工作分解到较小级别的任务上,在做每个任务时关注更少的东西。

让程序单元的职责单一,可以使你在编写这段程序时关注更少的东西,从而降低难度,减少出错。

4.9变量的声明,初始化和被使用尽量放到一起

比方说如下代码:

intorderNum=getOrderNum();

//dosomethingwithouorderNumhere

call(orderNum);

上例中的注释处代表了一段和orderNum不相关的代码。

orderNum的声明和初始化离被使用的地方相隔了很多行的代码,这样做不好,不如这样:

//dosomethingwithouorderNumhere

intorderNum=getOrderNum();

call(orderNum);

4.10缩小变量的作用域

能用局部变量的,不要使用实例变量,能用实例变量的,不要使用类变量。

变量的生存期越短,意味着它被误用的时机越小,同一时刻程序员要关注的变量的状态越少。

实例变量和类变量默认都不是线程平安的,局部变量是线程平安的。

比方如下代码:

publicclassOrderPayAction{

privateOrderorder;

 

publicvoiddoAction(){

order=orderDao.findOrder();

doJob1();

doJob2();

}

 

privatevoiddoJob1(){

doSomething(order);

}

 

privatevoiddoJob2(){

doOtherThing(order);

}

}

上例中order只不过担当了在方法间传递参数之用,用下面的方法更好:

publicclassOrderPayAction{

publicvoiddoAction(){

order=orderDao.findOrder();

doJob1(order);

doJob2(order);

}

 

privatevoiddoJob1(Orderorder){

doSomething(order);

}

 

privatevoiddoJob2(Orderorder){

doOtherThing(order);

}

}

4.11尽量不要用参数来带回方法运算结果

比方:

publicvoidcalculate(Orderorder){

intresult=0;

//dolotsofcomputingandstoreitintheresult

order.setResult(result);

}

 

publicvoidaction(){

order=orderDao.findOrder();

calculate(order);

//dolotsofthingsaboutorder

}

例子中calculate方法通过传入的order对象来存储结果,不如如下写:

publicintcalculate(Orderorder){

intresult=0;

//dolotsofcomputingandstoreitintheresult

returnresult;

}

 

publicvoidaction(){

order=orderDao.findOrder();

order.setResult(calculate(order));

//dolotsofthingsaboutorder

}

4.12防止在方法中出现多个return语句〔退出点〕:

在你的方法中,确保只有一个退出点。

不要在一个方法中使用多于一个return语句。

如,下面的代码是不推荐的,因为它有多个退出点〔return语句〕。

privatebooleanisEligible(intage){

if(age>18){

returntrue;

}else{

returnfalse;

}

}

上面的代码可以这么写〔当然,下面的代码还可以改良,后面再说〕。

privatebooleanisEligible(intage){

booleanresult;

if(age>18){

result=true;

}else{

result=false;

}

returnresult;

}

4.13简化if-else方法:

我们写了一些只要一个参数的工具方法,检查一些条件并根据条件返回一个值。

如,在上面见到的isEligible方法。

privatebooleanisEligible(intage){

booleanresult;

if(age>18){

result=true;

}else{

result=false;

}

returnresult;

}

可以只使用一个return语句来重写此方法。

privatebooleanisEligible(intage){

returnage>18;

}

4.14不要为Boolean,Integer或String创立新的实例:

防止创立新的Boolean,Integer,String等实例。

使用Boolean.valueOf(true)代替newBoolean(true)。

两种写法效果差不多但却可以改善性能。

4.15把多个if语句合并成一个:

下面的代码

if(age>18){

if(voted==false){

//eligibletovote.

}

}

可以使用一个if语句改写为:

if(age>18&&!

voted){

//eligibletovote

}

4.16别忘了给switch添加default语句:

总是给switch添加一个default语句。

4.17防止重复使用同样的字符串,创立一个常量吧:

如果你需要在多个地方使用同一个字符串,那就创立一个字符串常量来使用吧。

下面的代码:

privatevoidsomeMethod(){

logger.log("MyApplication"+e);

....

....

logger.log("MyApplication"+f);

}

可以创立一个常量代替字符串"MyApplication":

publicstaticfinalStringMY_APP="MyApplication";

privatevoidsomeMethod(){

logger.log(MY_APP+e);

....

....

logger.log(MY_APP+f);

}

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

当前位置:首页 > 自然科学 > 物理

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

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