fJAVA编码规范.docx

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

fJAVA编码规范.docx

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

fJAVA编码规范.docx

fJAVA编码规范

密级:

内部公开

文档编号:

XXXXX_SD_PROC_JAVABMGF

版本号:

V1.0

 

Java编码规范

编制:

生效日期:

审核:

批准:

变更记录

变更序号

变更原因

变更页码

变更前版本号

变更后版本号

更改人

批准人

生效日期

备注

1

文档建立

(注:

重要部分采用了蓝色文字标记)

目录

1.原则约定3

1.1.抽象依赖原则3

1.2.接口隔离原则3

1.3.单一职责原则3

1.4.编写伪代码3

1.5.泛型的使用3

1.6.Annotation使用3

1.7.异常的处理4

1.8.Final关键字4

1.9.工具类的使用4

1.10.控制层开发注意4

1.11.业务逻辑层开发注意4

1.12.数据访问层开发注意4

2.编码细节5

2.1.数组指示符紧跟类型变量5

2.2.避免长的布尔表达式5

2.3.避免条件语句中执行方法5

2.4.三元条件运算符5

2.5.条件语句/循环体主要形式5

2.6.switch语句的使用格式6

2.7.代码的长度6

2.8.代码的缩进6

2.9.空格的使用7

2.10.空行的使用7

3.注释规范7

3.1.基本原则7

3.2.包8

3.3.类、接口注释8

3.4.方法注释8

3.4.常量,变量8

3.5.其他注释8

4.命名规则9

4.1.基本原则9

4.2.java命名9

4.2.1.包9

4.2.2.类9

4.2.3.抽象类,接口9

4.2.4.常量10

4.2.5.变量和参数10

4.2.6.数组的命名10

4.2.7.方法10

4.3.数据库命名11

4.3.1.基本规则:

11

4.3.2.表名11

4.3.3.字段:

11

4.3.4.主键:

11

4.3.5.外键:

11

4.4.JSP/HTML命名12

5.声明规范12

5.1.基本原则12

5.2.方法13

5.3.字段13

附1:

常用缩写简表13

附2:

匈牙利命名法14

1.原则约定

1.1.抽象依赖原则

抽象依赖原则(稳定依赖原则)。

应该依赖于抽象而不依赖与具体类,抽象的类和接口是稳定的,而具体类是易变的,如果依赖于具体类,代码就会非常脆弱,失去了灵活性。

1.2.接口隔离原则

一个类对另外一个类的依赖应该建立在最小的接口之上的。

1.3.单一职责原则

如果一个类有多于一种的职责,当需求变化时,类的职责就要发生变化,而因此就会引起引用该类的代码发生改变,职责越多,这个类就容易跟更多的类产生耦合关系,而且改变一个职责,可能会影响到另外一个职责的履行。

1.4.编写伪代码

编写代码前,先编写注释(可以认为是伪代码),先想后写。

/**

*报表构建器,主要职责:

*1.创建拷贝报表模版

*2.填充报表数据

*3.构建报表

*4.画图处理

*/

1.5.泛型的使用

集合框架工具类使用的时候,尽量使用泛型,限制类型。

1.6.Annotation使用

1.6.1.重载方法应该使用@Override,可避免父类方法改变时导致重载函数失效

1.6.2.不要让警告出现。

不需要关心的warning信息用@SuppressWarnings("unused"),@SuppressWarnings("unchecked"),@SuppressWarnings("serial")注释。

1.7.异常的处理

1.7.1.重新抛出的异常必须保留原来的异常信息。

1.7.2.如果异常被捕获,则不应该再出现在抛出异常的声明中。

1.7.3.在所有异常被捕获且没有重新抛出的地方必须写日志

1.7.4.如果属于正常异常的空异常处理块须注释说明,否则不允许空的catch块。

1.8.Final关键字

1.8.1.对一些基本数据类型和不太可能通过继承进行扩展的类

1.8.2.作为参数,在方法体内不会发生变化或修改,要考虑声明为final

1.9.工具类的使用

1.9.1.首先尽量使用apache组织开源项目下的一些通用工具包

1.9.2.其次使用公司基础框架中定义的工具类

1.9.3.再次没有满足需求的工具类时,才自己定义。

1.10.控制层开发注意

1.10.

1.10.1.在页面中尽量不用action名+"!

"+方法名去调用用webwork的action方法

1.10.2.webwork的action配置统一,即每一个action方法一个action配置

1.10.3.action方法中尽量不要写逻辑代码,应该放到service层实现类方法中

1.11.业务逻辑层开发注意

1.

1.9.

1.10.

1.10.1.service层实现类方法参数要校验,建议使用Spring的Assert系列函数。

1.10.2.方法定义的颗粒度要适当。

1.10.3.对于数据库有写操作的必须增加事务支持。

1.12.数据访问层开发注意

1.11.

1.12.

1.12.1.DAO层实现类尽量不要写逻辑代码,单纯的数据库操作(逻辑应放到service层实现类方法中)。

1.12.2.使用Spring提供的jdbcTemplate时,应该酌情考虑使用JdbcTemplate还是SimpleJdbcTemplate

2.编码细节

2.

2.1.数组指示符紧跟类型变量

int[]a=newint[20];

//避免:

inta[]=newint[20];

2.2.避免长的布尔表达式

//应换成多个更容易理解的表达式

boolisFinished=(elementNo<0)||(elementNo>maxElement);

boolisRepeatedEntry=elementNo==lastElement;

if(isFinished||isRepeatedEntry){

}

//避免

if((elementNo<0)||(elementNo>maxElement)||elementNo==lastElement){

}

2.3.避免条件语句中执行方法

InputStreamstream=File.open(fileName,"w");

if(stream!

=null){

}

//避免

if(File.open(fileName,"w")!

=null)){

}

2.4.三元条件运算符

可以使用如下三种表达方式,条件要用括号括起来。

alpha=(aLongBooleanExpression)?

beta:

gamma;

2.5.条件语句/循环体主要形式

即使单条语句,或者没有语句也要使用括号括起来。

例如:

if(condition){

statements;

}elseif(condition){

}else{

statements;

}

for(initialization;condition;update){

}

2.6.switch语句的使用格式

switch(condition){

caseABC:

statements;

//穿透,一定要做出注释

caseDEF:

statements;

break;

caseXYZ:

statements;

break;

default:

statements;

break;

}

2.7.代码的长度

a)不要使用Eclipse自带的代码Format操作,那会让代码可能性降低。

b)单个函数的有效代码长度当尽量控制在100行以内(不包括注释行)。

c)单个类的长度包括注释行不超过1500行。

页宽应该设置为100字符(选)。

2.8.代码的缩进

应该使用4个空格或者一个TAB键为一个单位进行缩进,例如:

publicStringinvoke()throwsException{

StringprofileKey="invoke:

";

try{

UtilTimerStack.push(profileKey);

if(executed){

test=true;

}

}catch{

}

}

2.9.空格的使用

有空格会让代码可读性提高,更整齐美观。

a)运算符两边应该各有一个空格。

b)Java保留字后面应跟随一个空格。

c)逗号后面应跟随一个空格。

d)冒号两个应各有一个空格。

e)分号后面应跟随一个空格。

a=(b+c)*d;//NOT:

a=(b+c)*d

while(true){//NOT:

while(true){...

doSomething(a,b,c,d);//NOT:

doSomething(a,b,c,d);

case100:

//NOT:

case100:

for(i=0;i<10;i++){//NOT:

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

2.10.空行的使用

a)文件头部注释、package语句和import语句之间。

b)class之间

c)方法之间

d)方法中,变量的申明和具体代码之间。

e)逻辑上相关的语句段之间

f)块注释和行注释的前面

逻辑上紧密相关的代码块应该用一个空行分开。

3.注释规范

3.1.基本原则

a)注释的内容,要真正能起到作用,不能为了注释为注释,简单的去拷贝被人注释是不允许的。

b)注释的格式要尽量使用Html格式书写。

例如使用
使用转义字符>表示>

c)接口方法的注释要能体现出该接口的作用,使用范围,输入输出。

d)实现方法的注释要能体现出,具体的实现,尽量详细,让别人能知道你的实现思路,有助于发现问题。

3.2.包

Web程序对于包的命名比较统一,相对都比较容易理解。

如果有需要注释的包,应该在package前面加以注释,注释内容应该包含,包的作用、核心类、工具类、与其他模块有怎样的关联。

3.3.类、接口注释

在类、接口定义之前当对其进行注释,包括类、接口的目的、作用、功能、继必要的实现算法、提供的使用方法、作者、示例程序等。

源文件的头部需要一个history段,对于每次对源文件的重大改动,都需要在history段中注明。

例如:

/**

*类文件说明:

*

*@authoryuan

*@date2007-12-19上午09:

57:

01

*history

*2007/06/01Biz创建文件

*2007/06/19kevin增加提示功能

*/

3.4.方法注释

依据标准JavaDoc规范对方法进行注释,以明确该方法功能、作用、各参数含义以及返回值等。

复杂的算法用/**/在方法内注解出。

/**

*作用:

*

*@param####

*@return####

*@throws####

*/

3.4.常量,变量

重要的变量要加以注释,以说明其含义等

3.5.其他注释

a)过长的方法实现,应将其语句按实现的功能分段加以注释概括说明。

b)分支条件表达式应该加注释,非常简单明了的除外。

4.命名规则

4.1.基本原则

a)所有包,类,接口,方法,属性,变量,参数均使用英文单词进行命名。

b)命名包,类,接口,方法以及变量时,尽量使用贴近问题域的表意丰富的名称。

c)采用大小写混合,提高名字的可读性。

一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。

包名全部小写。

d)尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等,具体参看附录之《常用缩写简表》,严禁滥用缩写。

e)避免使用长名字(最好不超过25个字母)。

f)避免使用数字,但可用2代替to,用4代替for等,如:

go2Jsp。

g)名字可以有两个或三个单词组成,但不应多于三个,变量名称必须大于等于3个字符(循环变量除外)。

4.2.java命名

4.2.1.包

包名一律小写,不能含有大写字母,不要出现下划线等符号,一般以项目或模块名命名,少用缩写和长名,尽量使用单个单词。

此外,对于包名我们做如下约定:

1.工具函数类包名前缀为.util

2.Action类包名前缀为.action

3.domain类包名前缀为.domain

4.service类包名前缀为.service

5.dao类包名前缀为.dao

6.dao和service的实现包名前缀为.impl

7.testcase类包名前缀为.test

4.2.2.类

类的的名字所有单词第一个字母大写,其他字母小写。

eg:

UserManager,ClassLoader,HttpHeaderResult

类的申明中要一个缺省的构造函数

4.2.3.抽象类,接口

对于抽象类,应该使用Abstract前缀。

eg:

AbstractReportBuilder,AbstractBeanFactory

为了基于接口编程,建议采用母为I为前缀的,其实现类使用Impl后缀的命名方式。

例如:

接口命名为:

IBookDAO,其实现类命名为:

BookDAOImpl

4.2.4.常量

常量,采用完整的英文大写单词,在词与词之间用下划线连接。

4.2.5.变量和参数

1.名字除了第一个单词,所有单词第一个字母大写,其他字母小写。

2.对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX,boolean使用isXXX,hasXXX等等.

3.方法的参数使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字.

4.2.6.数组的命名

数组应该总是用下面的方式来命名:

byte[]buffer;

而不是:

bytebuffer[];

4.2.7.方法

1.方法名应该使用动词开头,一般由动词+名词组成。

方法的命名应采用完整的英文描述符,大小写混合使用:

所有中间单词的第一个字母大写。

方法名称的第一个单词常常采用一个有强烈动作色彩的动词。

eg:

getName,initialize,addParameter,deleteUser

尽量可由函数名得知函数功能,尽量写全,减少缩写

缩写字母也应该保持首字母大写

exportHtmlSource();//避免:

exportHTMLSource();

openDvdPlayer();//避免:

openDVDPlayer();

2.变量的名字应该和类型名称一致

voidsetTopic(Topictopic)

//避免:

voidsetTopic(Topicvalue)

//避免:

voidsetTopic(TopicaTopic)

//避免:

voidsetTopic(Topict)

voidconnect(Databasedatabase)

//避免:

voidconnect(Databasedb)

//避免:

voidconnect(DatabaseoracleDB)

3.当同时定义多个属于同一个类的变量时,把类型作为实例的后缀,如:

PointstartPoint;

PointcenterPoint;

4.使用is前缀表示一个布尔变量和方法。

isUsed,isEmpty,isVisible,isFinished

有时也可以使用has,can,should:

booleanhasLicense();

booleancanEvaluate();

booleanshouldAbort=false;

5.在查询方法中应使用find作为前缀

6.在更新方法中应使用update作为前缀

7.在删除方法中应使用delete作为前缀

8.在增加方法中应使用insert作为前缀

9.使用init做为对象初始化的方法前缀,也可以简写为init

init();

initializeFiles();

initFontSet();

10.对于表示编号的变量,应加No后缀。

tableNo,userNo,employeeNo

11.避免使用否定布尔变量

booleanisError;//避免:

isNoError

booleanisFound;//避免:

isNotFound

4.3.数据库命名

4.3.1.基本规则:

1.所有名称以字母及“_”符号组合而成,其它符号禁止使用。

2.表名称,字段名称必须大写。

3.表名、字段名不允许超过15个单词。

4.ORACLE数据库的常用表字段类型:

NUMBER、DOUBLE、VARCHAR2()、CLOB、BLOB等,其它字段谨慎使用。

5.PD中的设计表、字段必须注释说明

6.数据库采用NUMBER

(1)类型表达JAVA中的BOOLEAN类型,1为true,0为false,命名采用肯定是命名

eg:

isValid//notisNotValid

7.ORACLE数据库采用NUMBER(14)类型存储的格式为20100408233310表示日期类型

4.3.2.表名

表名构成:

前缀(系统简称)+”_”+模块名称+”_”+对象名称(英文单词或英文缩写),例如表:

PW_AUTH_USER

4.3.3.字段:

采用有意义的单词拼凑需成。

单词之前用“_”分隔,应尽量避免字段带表名。

例如:

表明叫做RH_SYS_USER,有一个名称属性,给字段命名时应该叫NAME,最好不要叫做USER_NAME

4.3.4.主键:

所有表中都需含有代理主键字段,建议统一命名为:

ID;

4.3.5.外键:

[表名ID]

例:

用户角色表中有用户ID字段。

命名方式为:

USER_ID

存在主外键关系的,根据使用持久框架来决定:

如果使用类似HibernateORM持久工具,关系建议交给程序配置文件来建立,

使用JDBC则必须建立

4.4.JSP/HTML命名

1.文件夹命名应该使用英文单词,不能超过3个单词,除第一个单词首字母外,其他单词均小写并且首字母大写,尽量不包含数字或者下划线。

如果单词超过3个则应该采用规范的缩写。

2.页面逻辑(JSP)名称=操作对象名称+操作方法名,使用匈牙利命名法.

表单name属性统一以“form”开头,其后加该表单所需收集的信息的作用或动作

例如:

formFileUpload或formSendMail。

其他不做限定。

3.javascript脚本方法与变量命名与java相同

如果项目已经提供了公共js脚本,则优先使用公共js脚本中提供的函数。

模块通用的脚本函数必须集合于一个js文件中,命名使用模块名eg:

ebwebmail.js。

在页面上通过形式导入。

所有定义方法的

相关搜索

当前位置:首页 > 总结汇报 > 学习总结

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

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