JAVA代码规范详细版.docx

上传人:b****0 文档编号:12852617 上传时间:2023-04-22 格式:DOCX 页数:15 大小:20.50KB
下载 相关 举报
JAVA代码规范详细版.docx_第1页
第1页 / 共15页
JAVA代码规范详细版.docx_第2页
第2页 / 共15页
JAVA代码规范详细版.docx_第3页
第3页 / 共15页
JAVA代码规范详细版.docx_第4页
第4页 / 共15页
JAVA代码规范详细版.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

JAVA代码规范详细版.docx

《JAVA代码规范详细版.docx》由会员分享,可在线阅读,更多相关《JAVA代码规范详细版.docx(15页珍藏版)》请在冰豆网上搜索。

JAVA代码规范详细版.docx

JAVA代码规范详细版

JAVA代码规范

本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。

本文档中没有说明的地方,请参看SUNJava标准代码规范。

如果两边有冲突,以SUNJava标准为准。

1.标识符命名规范

概述

标识符的命名力求做到统一、达意和简洁。

统一

统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。

统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。

即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。

达意

达意是指,标识符能准确的表达出它所代表的意义,比如:

newSupplier,OrderPaymentGatewayService等;而supplier1,service2,idtts等则不是好的命名方式。

准确有两成含义,一是正确,而是丰富。

如果给一个代表供应商的变量起名是order,显然没有正确表达。

同样的,supplier1,远没有targetSupplier意义丰富。

简洁

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

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

比如:

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

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

"

骆驼法则

Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。

比如:

supplierName,addNewContract,而不是supplier_name,add_new_contract。

英文vs拼音

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

比如表示归档,用archive比较好,用pigeonhole则不好,用guiDang尚可接受。

包名

使用小写字母如,不要

单词间不要用字符隔开,比如,而不要类名

首字母大写

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

后缀

类名往往用不同的后缀表达额外的意思,如下表:

后缀名

#

意义

举例

Service

表明这个类是个服务类,里面包含了给其他类提同业务服务的方法

PaymentOrderService

Impl

这个类是一个实现类,而不是接口

PaymentOrderServiceImpl

Inter

这个类是一个接口

LifeCycleInter

$

Dao

这个类封装了数据访问方法

PaymentOrderDao

Action

直接处理页面请求,管理页面逻辑了类

UpdateOrderListAction

Listener

响应某种事件的类

PaymentSuccessListener

Event

这个类代表了某种事件

{

PaymentSuccessEvent

Servlet

一个Servlet

PaymentCallbackServlet

Factory

生成某种对象工厂的类

PaymentOrderFactory

Adapter

用来连接某种以前不被支持的对象的类

DatabaseLogAdapter

Job

某种按时间运行的任务

PaymentOrderCancelJob

Wrapper

这是一个包装类,为了给某个类提供没有的能力

SelectableOrderListWrapper

Bean

这是一个POJO

MenuStateBean

方法名

首字母小写,如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,345)

域(field)名

静态常量

全大写用下划线分割,如

publicstaticfindStringORDER_PAID_EVENT=“ORDER_PAID_EVENT”;

枚举

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

publicenumEvents{

ORDER_PAID,

ORDER_CREATED

}

其他

首字母小写,骆驼法则,如:

publicStringorderName;

局部变量名

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

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

2.代码格式

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

源文件编码

源文件使用utf-8编码,结尾用unixn分格。

行宽

行宽度不要超过80。

Eclipse标准

包的导入

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

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

类格式

·

域格式

每行只能声明一个域。

域的声明用空行隔开。

方法格式

代码块格式

缩进风格

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

package;

 

publicclassTestStyleextendsSomeClassimplementsAppleInter,BananaInter{

publicstaticfinalStringTHIS_IS_CONST="CONSTVALUE";

 

!

privatestaticvoidmain(String[]args){

intlocalVariable=0;

}

 

publicvoidcompute(Stringarg){

if()>0){

}

 

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

}

 

.

while(condition){

 

}

 

do{

otherMethod();

}while(condition);

 

switch(i){

case0:

callFunction();

{

break;

case1:

callFunctionb();

break;

default:

break;

}

}

}

空格的使用

表示分割时用一个空格

不能这样:

if(a>b){

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

方法之间用空行分割

域之间用空行分割

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

3.注释规范

注释vs代码

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

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

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

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

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

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

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

JavaDoc

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

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

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

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

如下:

/**

*Thisisaclasscomment

*/

publicclassTestClass{

/**

*Thisisafieldcomment

}

*/

publicStringname;

 

/**

*Thisisamethodcomment

*/

publicvoidcall(){

 

}

}

块级别注释

#

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

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

较长的代码块要用

/*------start:

------*/

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

-------*/

包围

如:

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

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

要比iforder’sisPaidmethodreturnstrue,…更容易理解

减少代码嵌套层次

代码嵌套层次达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();

}

}

}

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

程序职责单一

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

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

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

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

比方说如下代码:

intorderNum=getOrderNum();

//dosomethingwithouorderNumhere

~

call(orderNum);

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

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

//dosomethingwithouorderNumhere

intorderNum=getOrderNum();

call(orderNum);

缩小变量的作用域

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

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

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

比如如下代码:

publicclassOrderPayAction{

privateOrderorder;

 

publicvoiddoAction(){

;

order=();

doJob1();

doJob2();

}

 

privatevoiddoJob1(){

doSomething(order);

}

 

privatevoiddoJob2(){

doOtherThing(order);

~

}

}

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

publicclassOrderPayAction{

publicvoiddoAction(){

order=();

doJob1(order);

doJob2(order);

}

 

privatevoiddoJob1(Orderorder){

doSomething(order);

}

 

privatevoiddoJob2(Orderorder){

doOtherThing(order);

}

}

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

比如:

publicvoidcalculate(Orderorder){

intresult=0;

//dolotsofcomputingandstoreitintheresult

(result);

}

 

publicvoidaction(){

order=();

calculate(order);

//dolotsofthingsaboutorder

}

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

publicintcalculate(Orderorder){

intresult=0;

//dolotsofcomputingandstoreitintheresult

returnresult;

}

 

publicvoidaction(){

order=();

(calculate(order));

//dolotsofthingsaboutorder

}

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1