Java程序编码规范.docx

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

Java程序编码规范.docx

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

Java程序编码规范.docx

Java程序编码规范

JAVA程序编码规范v1.0

南京思美软件系统集成有限公司

2010年12月

 

A)版本信息

版本号

修订时间

修订人

修订内容

1.0

2010年

杨红金

b)规范说明

章节编号

章节名称

主要内容

规范级别

1

命名规范

JAVA包、类名、属性、变量等的命名规则

强制

2

JAVA注释规范

对JAVA类、公共方法、修订的注释规范

强制

3

异常处理规范

异常的抛出、处理等方面的规范

强制

4

良好编程习惯

对于编程有益的一些习惯

推荐

 

前言4

1命名规范5

1.1一般概念5

1.2标识符类型说明5

2.Java注释规范6

2.1类的注释信息6

2.2方法的注释6

2.3程序修订的注释7

3.异常处理7

3.1异常的抛出7

3.2异常的处理(截获)7

3.3在finally块中回收关键资源9

4.良好编程习惯10

4.1用'L'替换'l'来表示长整数.10

4.2对于工具类只声明“私有”的构造方法[CODSTA.UCC]11

4.3避免使用字符常量11

4.4尽可能定义缺省构造方法[CODSTA.DCTOR]12

4.5保持类元素的良好次序[CODSTA.FO]13

4.6尽量“私有化”14

4.7按名字组织方法.[CODSTA.OGM]14

4.8将比较表达式中的常量放在左边[CODSTA.CLS]15

4.9将类里的元素按可访问的级别排序.[CODSTA.ORCIA]16

4.10对于复杂的表达式使用括号[FORMAT.APAREN]17

4.11在命名数组的时候在数组元素类型和变量的名字之间熟悉“[]18

4.12CloseJDBCresourcesin"finally"blocks.[JDBC.RRWD]18

4.13避免通过实例对象去访问“静态”属性或方法19

4.14避免使用deprecated的API方法20

4.15避免给局部变量或参数变量与类的成员变量取相同的名字21

4.16使用'StringTokenizer'替代'indexOf()'或'substring()'进行字符串解析22

4.17为else,if,for,while等后面的语句增加{}23

4.18如果需要精确结果,避免使用"float"和"double"类型23

4.19避免在构造方法中调用非final和非static的方法24

4.20变量的使用和定义尽量放在一块26

4.21将局部常数变量声明为“final”26

4.22避免对方法的传入参数进行赋值27

4.23使用StringBuffer替代String进行字符串拼接28

 

前言

“良好的开始是成功的一半”,良好的编码规范就是良好的程序结构的重要组成部分。

在一个开发组织中遵循一套有效的编码规范是非常重要的,

其一,规范程序的样式,方便对程序的阅读和维护;

其二,采纳好的编程经验有助于提升软件的品质和性能。

 

2010年12月

1命名规范

1.1一般概念

1、尽量使用完整的英文描述符

2、采用适用于相关领域的术语

3、采用大小写混合使名字可读

4、尽量少用缩写,但如果用了,必须符合整个工程中的统一定义

5、避免使用长的名字(小于15个字母为正常选择)

6、避免使用类似的名字,或者仅仅是大小写不同的名字

7、避免使用下划线(除静态常量等)

1.2标识符类型说明

1.包(Package)的命名

Package的名字应该采用完整的英文描述符,都是由一个小写单词组成。

并且包名的前缀总是一个顶级域名,

通常是com、edu、gov、mil、net、org、cn等;

如:

cn.simesoft.test

2、类(Class)的命名

类名应该是个一名词,采用大小写混合的方式,每个单词的首字母大写。

尽量保证类名简洁而富于描述。

使用完整单词,避免缩写词(除非工程内有统一缩写规范或该缩写词被更广泛使用,像URL,HTML)

如:

FileDescription

3、接口(Interface)的命名

基本与Class的命名规范类似。

在满足Class命名规则的基础之上,保证开头第一个字母为”I”,

便于与普通的Class区别开。

其实现类名称取接口名的第二个字母到最后,且满足类名的命名规范;

如:

IMenuEngine

4、枚举(Enum)的命名

基本与Class的命名规范类似。

在满足Classd命名规则的基础之上,保证开头第一个

字母为“E”,

便于与普通的Class区别开。

如:

EUserRole

5、异常(Exception)的命名

异常(Exception)通常采用字母e表示异常,对于自定义的异常类,其后缀必须

Exception

如:

BusinessException

6、方法(Method)的命名

方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首

字母大写。

方法名尽可能的描述出该方法的动作行为。

返回类型为Boolean值的方法一般由“is”

或“has”来开头

如:

getCurrentUser()、addUser()、hasAuthority()

7、参数(Param)的命名

第一个单词的首字母小写,其后单词的首字母大写。

参数量名不允许以下划线或美元符

号开头,

虽然这在语法上是允许的。

参数名应简短且富于描述。

如:

publicUserContextgetLoginUser(StringloginName);

8、常量字段(Constants)的命名

静态常量字段(staticfinal)全部采用大写字母,单词之间用下划线分隔;

如:

publicstaticfinalLongFEEDBACK;

publicstaticLongUSER_STATUS;

2.Java注释规范

2.1类的注释信息

对于JAVA类必须按照javadoc的方式进行注释,必须说明类的用途和编写人,编写人在@author后面用中文的姓名或姓名的全拼来表示。

/***

*Title:

类的标题

*Description:

类的描述

*Copyright:

Copyright(c)2010

*Company:

思美软件

*@authorliugang*@version1.0

*/

publicclassDBTool

{……

2.2方法的注释

对所有public类型的方法必须以javadoc方式进行注释说明,说明方法的用途、参数和抛出的异常等,如下所示:

/**

*方法的用途

*@paramr1int[]参数1说明

*@paramr2int[]参数2说明

*@paramr3int[]参数3说明

*@paramr4int[]参数4说明

*@throwsIllegalArgumentException异常说明

*/

protectedfinalvoidsetArray(int[]r1,int[]r2,int[]r3,int[]r4)throwsIllegalArgumentException

{

if(r1.length!

=r2.length||r1.length!

=r3.length||r1.length!

=r4.length)

thrownewIllegalArgumentException("Arraysmustbeofthesamesize");System.arraycopy(r1,0,r3,0,r1.length);

System.arraycopy(r2,0,r4,0,r1.length);

}

2.3程序修订的注释

我们在对已有的JAVA程序进行修改时,应该在修改的位置进行注释说明,注释的格式不做限制,但注释的内容应包括:

修改人、修改时间、修改原因等。

3.异常处理

3.1异常的抛出

不应抛出Exception,RuntimeException或Throwable类型的异常,而应使用它们的子类。

否则,异常的截获者无法区分异常的类型,从而进行有针对性的处理。

3.2异常的处理(截获)

1.不得隐瞒截获的异常(不做任何处理)。

反例如下:

Try

{

……

}

catch(SQLExceptionse)

{

}

2.不要在循环语句中进行异常处理。

反例如下:

for(inti=0;i

{

…….

try

{

……

}

catch(SomeExceptionex)

{

……

}

}

3.不要直接截获Exception类型的异常,而应当针对每一种具体的异常类型进行处理。

反例如下:

try

{

…….

//throwsSQLException,BaseRunException等

}

catch(Exceptionex)

{

……

}

4.在STRUTSACTION和MODEL类中处理异常:

在MODEL类中应尽量将异常直接向外抛出,而不应该直接记录日志或打印;

在ACTION中对于从MODEL中传来的异常进行处理,对于其它类型的异常应转换成highsoft.framework.exceptions.BaseRunException或其子类异常,同时附加一定的提示信息;

范例:

publicActionForwardinitForm(

ActionMappingactionMapping,

ActionFormactionForm,

HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse)

throwshighsoft.framework.exceptions.BaseRunException//向外抛出特定的异常

{

ReportStatFormform=(ReportStatForm)actionForm;

ReportStatActionBDstatBD=newReportStatActionBD(form);

try

{

form.setUserView(this.getUserView(httpServletRequest));statBD.queryStatInfo(httpServletRequest);

}

catch(BaseRunExceptionex)

{

//对于BaseRunException类型的异常直接抛出

throwex;

}

catch(SQLExceptionex)

{

thrownewBaseRunException("查询报表信息出错!

",ex);

}

returnactionMapping.getInputForward();

}

3.3在finally块中回收关键资源

JAVA使用成熟的后台垃圾收集技术来代替引用计数,因此必须在使用完对象的实例以后进行清场工作,对于普通对象只要保证其引用不存在于其他实例中即可,而对于一些外部资源(比如数据库连接、文件句柄和SOCKET连接等)需要显式调用关闭或释放的方法。

在使用完这些资源后应在finally中将其关闭并置空,例如:

Connectioinconn=null;

try

{

conn=ds.getConnection();

PreparedStatementstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

//执行数据库操作

……

//关闭STATEMENT

stmt.close();

stmt=null;

//关闭连接

}

catch(Exceptione)

{

……

}

finally

{

if(conn!

=null)

{

Try

{

conn.close();

}catch(SQLExceptionex)

{

……

}

conn=null;

}

4.良好编程习惯

4.1用'L'替换'l'来表示长整数.

好处:

避免混淆

例子

packageexamples.rules.codsta;

publicclassLONG

{

publiclonggetLongNumber()

{

longtemp=23434l;

//VIOLATION

returntemp;

}

}

修改

packageexamples.rules.codsta;

publicclassLONGFixed

{

publiclonggetLongNumber()

{

longtemp=23434L;

//FIXED

returntemp;

}

}

4.2对于工具类只声明“私有”的构造方法[CODSTA.UCC]

注意:

工具类是只有静态成员变量或方法的类。

好处:

防止工具类被实例化。

例子

packageexamples.rules.codsta;

publicclassUCC

{

publicUCC()

{

}

//VIOLATION

publicstaticStringgetS()

{

returns;

}

publicstaticStrings="foo";

}

修改

packageexamples.rules.codsta;

publicclassUCCFixed

{

privateUCCFixed()

{

}

//FIXED

publicstaticStringgetS()

{

returns;

}

publicstaticStrings="foo";

}

4.3避免使用字符常量

好处:

命名常量(“finalstatic”域)使得代码易于理解和维护

例子

packageexamples.rules.codsta;

publicclassUSN

{

publicint[]getArray()

{

returnnewint[1000];

//VIOLATION

}

}

修改

packageexamples.rules.codsta;

publicclassUSNFixed

{

publicint[]getArray()

{

returnnewint[ARRAY_SIZE];//FIXED

}

privatestaticfinalintARRAY_SIZE=1000;

}

4.4尽可能定义缺省构造方法[CODSTA.DCTOR]

描述:

需要类提供没有参数的构造方法

好处:

缺省构造方法允许我们对未知类型的类进行动态装载和运行时实例化。

例子

packageexamples.rules.codsta;

publicclassDCTOR

{

//VIOLATION:

nodefaultconstructordefined

publicDCTOR(intsize)

{

_size=size;

}

privateint_size;

}

修改

packageexamples.rules.codsta;

publicclassDCTORFixed

{

//FIXED

publicDCTORFixed()

{

_size=0;

}

publicDCTORFixed(intsize)

{

_size=size;

}

privateint_size;

}

4.5保持类元素的良好次序[CODSTA.FO]

描述:

保持类或接口中的元素按照一种既定的模式,推荐按下面的顺序:

内部类或接口:

静态初始化方法

静态成员变量

静态方法

初始化方法

成员变量

构造方法

一般方法

好处:

使得代码组织良好,易于阅读

例子

packageexamples.rules.codsta;

publicclassFO

{

//VIOLATION

privateString_str;

publicstaticints_count;

publicstaticintcount()

{

returns_count;

}

publicStringtoString()

{

return_str;

}

publicFO()

{

_str="OOP.FO";

}

}

修改

packageexamples.rules.codsta;

publicclassFOFixed

{

//FIXED

publicstaticints_count;

privateString_str;

publicFO()

{

_str="OOP.FO";

}

publicstaticintcount()

{

returns_count;

}

publicStringtoString()

{

return_str;

}

}

4.6尽量“私有化”

让一切东西都尽可能地“私有”--private。

使库的某一部分“公共化”(一个方法、类或者一个字段等等),就不可能对他进行大的修改,以免破坏其他人现有的代码,使他们不得不重新编写和设计。

若只公布自己必须公布的,就可放心大胆地改变其他任何东西。

在多线程环境中,隐私是特别重要的一个因素--只有private字段才能在非同步使用的情况下受到保护。

4.7按名字组织方法.[CODSTA.OGM]

好处:

这能提高代码的易读性。

例子

packageexamples.rules.codsta;

publicclassOGM

{

voidfoo()

{

}

voidbar()

{

}

voidfoo(inta)

{

//VIOLATION:

thisshouldbewiththeprevious'foo()'

}

}

修改

packageexamples.rules.codsta;

publicclassOGMFixed

{

voidfoo()

{

}

voidfoo(inta)

{

//FIXED

}

voidbar()

{

}

}

4.8将比较表达式中的常量放在左边[CODSTA.CLS]

描述:

能够避免“=”和“==”的混淆带来的比较表达式混淆为赋值表达式的错误。

好处

if(false=var)

错写成:

if(var=false)

例子

packageexamples.rules.codsta;

publicclassCLS

{

publicvoidtestMethod(intsomething)

{

if(something==5)

{

}

//VIOLATION

}

}

修改

packageexamples.rules.codsta;

publicclassCLSFixed

{

publicvoidtestMethod(intsomething)

{

if(5==something)

{

}

//FIXED

}

}

4.9将类里的元素按可访问的级别排序.[CODSTA.ORCIA]

描述:

保证类中的成员按以下的顺序排列:

1)"public"成员.

2)"protected"成员.

3)Package-private成员.

4)"private"成员.

好处:

使得代码易于阅读

例子

packageexamples.rules.codsta;

publicclassORCIA

{

privateint_field;

protectedint_protectedField;

//VIOLATION

staticvoidmethod()

{

}

publicstaticvoidpublicMethod()

{

}

//VIOLATION

}

修改

packageexamples.rules.codsta;

publicclassORCIAFixed

{

protectedint_protectedField;//FIXED

privateint_field;

publicstaticvoidpublicMethod()

{

}

//FIXED

staticvoidmethod()

{

}

}

4.10对于复杂的表达式使用括号[FORMAT.APAREN]

好处:

可以避免出现表达式运算符运算顺序的错误使用

例子

packageexamples.rules.format;

publicclassAPAREN

{

publicintmax(inti,intj)

{

intdefault_num=0;

if(i>=j&&i>=0)

{

//VIOLATION

returni;

}

elseif(j>i&&j>=0)

{

//VIOLATION

returnj;

}

else

{

returndefault_num;

}

}

}

修改

packageexamples.rules.format;

publicclassAPARENFixed

{

publicintmax(inti,intj)

{

intdefault_num=

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

当前位置:首页 > 高等教育 > 管理学

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

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