Java开发规范(公司规范) 下载本文

DataModule dmTest = new DataModule(); 2、方法命名:首字符应小写 public class Foo {

public void fooStuff() { } }

3、类命名:首字符应大写 public class Foo {} 3.1.2

方法的命名应注意避免与java中具有特殊意义的名称例如equals,hashCode,clone,finalizer等冲突 ? 规范描述:

在java中某些方法是具有特殊意义的,例如boolean equals(Object o)是比较两个对象是否相等;int hashCode()取得hash值,主要用于hash表;Object clone()用于复制对象;void finalizer()用于该类实例化的对象释放时系统调用释放该对象使用的资源。这些方法具有固定的形参格式,固定的返回值,不能被其他形式或者用于其他方面的方法override,否则将降低代码可读性,并为代码维护带来隐患。

? PMD规则名称:

SuspiciousEqualsMethodName

SuspiciousHashcodeMethodName;

FinalizeOverloaded; BooleanGetMethodName; ? 规则级别:

Error High Error High Error High Error High ? 违规示例代码:

1、可疑的equals方法命名 public class Foo {

public int equals(Object o) {

// oops, this probably was supposed to be boolean equals }

public boolean equals(String s) {

// oops, this probably was supposed to be equals(Object) } }

2、可疑的hashCode命名 public class Foo {

public int hashCode(int value) {

// oops, this probably was supposed to be hashCode } }

? 合法代码示例:

1、正确的equals方法命名 public class Foo {

public boolean equals(Object o) {

// oops, this probably was supposed to be boolean equals } }

2、正确的hashCode命名 public class Foo {

public int hashCode() {

// oops, this probably was supposed to be hashCode } }

注:一般来说override hashCode方法为了避免键值冲突,提高hash表的查询效率,可采用37乘法原则,例如某javabean中包含两个关键属性str1,str2,str3该关键属性不能为空,这其hash值按以下算法获得:str1.hashCode()+str2.hashCode()*37+str3.hashCode()*37*37。 3.1.3

Java bean中取得boolean类型的属性值必须使用is****形式命名

? 规范描述:

对于java bean来说,get***是取得该bean的属性值,set***为设置该bean的属性值,is***是获得该bean中为boolean类型的属性值,这些方法对java bean来说是具有特殊意义,如果命名不规范将导致在使用java bean内置方法时出现取值,或者设值不成功。 ? PMD规则名称:

BooleanGetMethodName ? 规则级别:

Error High ? 违规示例代码:

public boolean getFoo(); // bad ? 合法代码示例:

public boolean isFoo(); // ok

3.1.4 if,else,while,for等必须使用{}

? 规范描述:

If,else,while,for等分支循环语句,必须使用{}将业务处理逻辑包含在内,这样可大大提高代码可读性,有利于后续代码维护。 ? PMD规则名称:

IfStmtsMustUseBraces WhileLoopsMustUseBraces IfElseStmtsMustUseBraces ForLoopsMustUseBraces ? 规则级别:

warn High

? 违规示例代码: 1、if语句违例代码 if (foo) x++;

2、else语句违例代码 if (foo) x++ else x--;

3、while语句违例代码 while(x<100) x++;

4、for语句违例代码 for(int i=0;i<10;i++) x++;

? 合法代码示例: 1、if语句 if (foo){ x++; }

2、else语句 if (foo){ x++ }else{ x--; }

3、while语句 while(x<100){ x++; }

5、for语句

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

x++; } 3.1.5

类必须包含在包里,禁止出现无包的类

? 规范描述:

包是java中类所在命名空间,用于类载入时,虚拟机快速定位并查找该类;如果一个无包类,在类载入时,耗时较多,并且很可能无法找到该类。 ? PMD规则名称: NoPackage ? 规则级别: error High 3.1.6

类和方法必须拥有注释,注释量占总体代码25%以上,类头部,以及方法头部的注释应符合javadoc标准。 ? 规范描述:

注释多少是评价代码质量好坏的一个标准,25%是符合国际上对java注释的标准;对于类头部注释,方法头部注释符合javadoc标准,可java工具自动根据源码生成相应的java帮助文档。对于类头部注释需要包含以下信息:该类的主用功能,作者,以及创建时间等信息;对于方法头部注释需要包含以下信息:该方法的主要功能,以及参数类型含义,返回值类型含义等等。 ? 合法代码注释示例 1、类头部注释规范

/**

* 实时数据文件解析:读取实时数据文件,对其内容进行解析,生成符合格式以及标准单位的数据集合

* @author wangliuyi * @version 1.0 * @since 2009-05-15 */

public class DataFileParse{ 2、方法头部注释规范

/**

* 判断该时间是否在统计时区里面

* @param time long 从实时采集文件中提取的时间,该时间为格林威治时间,单位为毫秒 * @return boolean true:表示该时间在合法的时间区内 false:表示该时间不合法 */

public boolean checkStatTimeZone(long time)