Java代码标准说明.docx

上传人:b****8 文档编号:9381970 上传时间:2023-02-04 格式:DOCX 页数:27 大小:336.86KB
下载 相关 举报
Java代码标准说明.docx_第1页
第1页 / 共27页
Java代码标准说明.docx_第2页
第2页 / 共27页
Java代码标准说明.docx_第3页
第3页 / 共27页
Java代码标准说明.docx_第4页
第4页 / 共27页
Java代码标准说明.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Java代码标准说明.docx

《Java代码标准说明.docx》由会员分享,可在线阅读,更多相关《Java代码标准说明.docx(27页珍藏版)》请在冰豆网上搜索。

Java代码标准说明.docx

Java代码标准说明

Java代码标准说明

 

1.环境配置2

1.1.软件2

1.2.项目导入2

1.3.项目编码配置3

2.项目通用命名规则6

2.1.命名方式6

2.2.方法命名规则6

2.3.变量命名规则6

2.4.常量命名规则7

2.5.注释7

2.6.注释范围8

2.7.Controller、Service、Dao等中的方法命名9

2.8.JSP页面命名10

3.代码书写规范10

3.1.返回值10

3.2.异常11

3.3.换行(WrappingLines)13

3.4.声明(Declaration)14

3.5.初始化(Initialization)15

3.6.布局(Placement)15

3.7.简单语句(SingleStatement)16

3.8.复合语句(CompoundStatements)16

3.9.返回语句(returnStatements)16

3.10.for语句(forStatements)17

3.11.while语句switch(whileStatements)17

3.12.空行(BlankLines)18

3.13.空格(BlankSpaces)18

3.14.圆括号(Parentheses)19

3.15.变量赋值(VariableAssignments)20

3.16.去除警告20

4.代码质量21

4.1.统一编码规范、代码样式21

4.2.静态代码分析21

4.3.单元测试21

4.4.持续集成22

4.5.代码评审和重构22

1.环境配置

1.1.软件

软件名称

版本

备注

Myeclipse

6.5

试用版

JDK

Jdk.1.6.0_45

sunJDK开源

Tomcat

6.0.37

Apache开源

Mysql

5.0.18/5.1

开源

SQLyog

9.6.2

试用版

SVN

subeclipse-site-1.6.5

插件

SVN客户端

TortoiseSVN1.6.7

插件

1.2.项目导入

1、

选择SVN地址输入帐号密码

完成即可

1.3.项目编码配置

文项目所有编码格式统一采用UTF-8设置

修改types和methods注释的方法

修改以上则类名自动加注释,需要修改里边的信息

方法名注释:

在方法的前面输入”/**”b然后回车自动出现注释调整样式即可。

 

2.项目通用命名规则

2.1.命名方式

文件名、变量名称使用有意义的英文(或缩写)进行命名,名称与数据表结构的名称命名保持一致,便于提高查阅效率。

所有由多个单词组成的名称统一用驼峰法则进行命名。

驼峰法则是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开始,第二个单字的首字母大写或每一个单字的首字母都采用大写字母,例如:

业务名称为角色,则命名为RoleController、RoleServiceImpl、findUniqueEntity等。

所有的命名根据业务名称的英文或者中文拼音,优先采用英文。

2.2.方法命名规则

方法名应是一个动词或动名结构,采用大小写混和的方式,其中第一个单词的首字母用小写,其后单词的首字母大写。

例如:

Xxxxx.getBmList();

每个方法前必须加说明包括:

参数说明、返回值说明、异常说明。

如果方法名实在是太长可以对变量名缩写,但是必须添加相应的说明。

2.3.变量命名规则

变量命名一般采用大小写混和的方式,第一个单词的首字母小写,其后单词的首字母大写,变量名一般不要用下划线或美元符号开头。

变量名应简短且有意义,即,能够指出其用途。

除非是一次性的临时变量,应尽量避免单个字符的变量名。

(1)类的实例对象定义如下:

Personperson;

(2)同一个类的多个对象可以采用一下定义方式:

Personperson1;

Personperson2;

(3)集合类的实例命名使用集合包含元素的英文名称的复数表示,例如:

Vectorpersons;

(4)如果变量名实在是太长可以对变量名缩写,但是必须在类说明或方法说明部分(视缩写的范围而定)进行说明。

(5)数组的声明要用"int[]packets"的形式,而不要用"intpackets[]"。

2.4.常量命名规则

类常量和ANSI常量的命名应全部用大写,单词间用下划线隔开。

例如:

finalstaticintMIN_WIDTH=4;

2.5.注释

Java程序有两类注释:

实现注释(implementationcomments)和文档注释(documentcomments)。

实现注释是那些在C++中见过的,使用/*…*/和//界定的注释。

文档注释(被称为“doccomments”)是Java独有的,并由/**…*/界定。

文档注释可以通过javadoc工具转换成HTML文件。

实现注释用以注释代码或或者实现细节。

文档注释从实现自由(implemtentation-free)的角度描述代码的规范。

它可以被那些手头没有源码的开发人员读懂。

注释应被用来给出代码的总括,并提供代码自身没有提供的附加信息。

注释应该仅包含与阅读和理解程序有关的信息。

例如,相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中。

在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避免提供代码中已清晰表达出来的重复信息,多余的注释很容易过时。

通常应避免那些代码更新就可能过时的注释。

类以及类中的每个方法必须有注释。

方法中的代码关键部分必须有注释,解释代码的意思。

Ø文本注释

类注释

/***

*function:

增删改查组件规范接口

*@projectXcj

*@packagecom.xcj.admin.base

*@fileNameBaseDao.java

*@createDate2010-03-30下午05:

28:

03

*@authorxx_xx

*@emailxx@

*/

Ø类中方法注释

/**

*function:

增加一个entity对象,返回是否添加成功

*@createDate2010-03-30下午05:

28:

38

*@authorsu_jian

*@param对象类型

*@paramentity对象

*@returnbooleantrue/false

*@throwsDataAccessException

*/

Ø单行注释

//获取系统管理员的所有权限

2.6.注释范围

a)类的方法名和类名必须有注释。

例如

/**

*function:

增加一个entity对象,返回是否添加成功

*@createDate2014-03-30下午05:

28:

38

*@authorsu_jian

*@param对象类型

*@paramentity对象

*@returnbooleantrue/false

*@throwsDataAccessException

*/

b)类调用的方法以及关键代码注释。

例如

//进行静态化处理

staticService.buidSingleArticle(article.getId());

//生成二维码图片

staticService.buidQRcode(article.getId());

c)配置文件(Spring、DB、等)代码注释。

例如

--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。

Default:

3-->

${c3p0.initialPoolSize}

--连接池中保留的最小连接数。

-->

${c3p0.minPoolSize}

2.7.Controller、Service、Dao等中的方法命名

方法类型

命名规则

举例(参数自己定义)

初始化

init+[操作对象]

init()

新增

save+[操作对象]

save()、saveObject()

删除

del+[操作对象s]

del()、delObject()

修改

update+[操作对象]

update()、updateObject()

新增+修改

edit+[操作对象]

edit()、editObject()

查看

view++[操作对象]

view()、viewObject()

获取单个对象

get+[操作对象]

get()、getObject()

获取列表数据

getListBypage+[操作对象s]

getXxListByPage()

获取集合数据

getXList+[操作对象s]

getXxList()、getXxListObject()

获取树形数据

getXTree+[操作对象s]

getXxTree()、getXxTreeObject()

前后插入

save(Before/After)+[操作对象]

saveObject()/saveBeforeObject()

禁用

disabled+[操作对象]

disabled()、disabledObject()

启用或激活

active+[操作对象s]

active()、activeObject()

授权

assign+[操作对象s]

assign()、assignObject()

撤销

unassign+[操作对象s]

unassign()、unassignObject()

…….

2.8.JSP页面命名

页面类型

命名规则

举例(参数自己定义)

主页

[操作对象]index.jsp

objectindex.jsp

新增页面

[操作对象]save.jsp

objectsave.jsp

修改页面

[操作对象]edit.jsp

objectedit.jsp

查看页面

[操作对象]detail.jsp

objectdetail.jsp

授权

[操作对象]assign.jsp

objectassign.jsp

...

3.代码书写规范

类的方法的代码行数不能过长,尽量控制在100行(90%),长的方法要拆分成私有函数。

3.1.返回值

返回值的情况,如果只需要一个对象里边的属性值,则无需返回整个对象。

返回值就行。

在一般情况下,方法返回值不应返回null。

而是尽量使用异常代替返回null。

如果在特殊情况必须返回null,必须在方法说明中加以特别说明,如使用“特别注意”等字样。

例如:

从一个集合类实例中提取一个对象,因为有些集合类实例是允许null作为键或值的,这个时候用异常取代返回null就不合适了。

如果方法的返回值是集合类对象,而且返回的集合对象不包含任何元素时,则应返回0长度或0大小的集合对象。

不能返回null。

3.2.异常

整个应用系统使用自行设计的唯一异常类,该类包括message(表示错误信息)和ID号(整型,表示异常类型)两部分,该类在创建时是自动获得类名、方法名、行号等信息。

在系统开发和上线之后的一段时间内,异常信息要直接发送到浏览器页面,以便于开发人员迅速定位错误。

所有的Controller必须捕获异常,所有的Service、Dao必须把异常抛到上一层进行相应的处理。

如果没有相应的Controller则在方法的最前面进行异常的捕获处理。

一个try-catch语句应该具有如下格式:

try{

statements;

}catch(ExceptionClasse){

statements;

}

一个try-catch语句后面也可能跟着一个finally语句,不论try代码块是否顺利执行完,它都会被执行。

try{

statements;

}catch(ExceptionClasse){

statements;

}finally{

statements;

}

异常DEMO如下:

@RequestMapping(value="/save",method=RequestMethod.POST)

publicStringsave(@Validated

Articlearticle,Modelmodel){

try{

article.setCreateDate(DateUtil.getCurrentTimeByDate());

article.setModifyDate(DateUtil.getCurrentTimeByDate());

article.setBoring

(1);

article.setLoves

(1);

Integerid=articleService.saveAndGetIdByInteger(article);

//以下是获取方法

Stringcheckboxs=article.getCheckbox();

if(checkboxs!

=null){

String[]strs=checkboxs.split(",");

for(inti=0;i

ArticleTagarticleTag=newArticleTag();

articleTag.setArticleId(id);

articleTag.setTagId(Integer.valueOf(strs[i]));

articleTagService.save(articleTag);

}

}

//进行静态化处理

staticService.buidSingleArticle(id);

//生成二维码图片

staticService.buidQRcode(id);

}catch(Exceptione){

log.error("文章:

保存对象出错:

"+e.getMessage());

e.printStackTrace();

}

return"redirect:

/admin/article/articleList_jsp";

}

其中红色部分为异常处理。

即所有的Controller中方法必须进行异常的处理。

常用工具类中异常DEMO如下:

publicstaticStringreadTxtFile(StringfilePath){

InputStreamReaderinputReader=null;

BufferedReaderbufferReader=null;

OutputStreamoutputStream=null;

try

{

InputStreaminputStream=newFileInputStream(filePath);

inputReader=newInputStreamReader(inputStream);

bufferReader=newBufferedReader(inputReader);

//读取一行

Stringline=null;

StringBufferstrBuffer=newStringBuffer();

while((line=bufferReader.readLine())!

=null)

{

strBuffer.append(line);

}

returnstrBuffer.toString();

}

catch(IOExceptione)

{

returnnull;

}

finally

{

}

}

3.3.换行(WrappingLines)

尽量避免一行长度超过80个字符,因为很多终端和工具不能很好处理之。

注意:

用于文档是的例子应该使用更短的行长,长度一般不超过70个字符。

如果超过则使用换行来处理。

//使用这种方式来换行

if((condition1&&condition2)

||(condition3&&condition4)

||!

(condition5&&condition6)){

doSomethingAboutIt();

}

//ORUSETHIS

if((condition1&&condition2)||(condition3&&condition4)

||!

(condition5&&condition6)){

doSomthingAoutIt();

}

这里有三种可行的方法用于处理三元运算表达式:

alpha=(aLongBooleanExpression)?

beta:

gamma;

alpha=(aLongBooleanExpression)?

beta

:

gamma;

alpha=(aLongBooleanExpression)

?

beta

:

gamma;

3.4.声明(Declaration)

每行声明变量的数量(NumberPerLine)

推荐一行一个声明,因为这样以利于写注释。

亦即,

intlevel;//indentationlevel

intsize;//sizeoftable

要优于,

intlevel,size;

不要将不同类型变量的声明放在同一行,例如:

intfoo,fooarry[];//WRONG!

注意:

上面的例子中,在类型和标识之间放了一个空格,另一种被允许的替代方法是使用制表符:

intlevel;//indentationlevel

intsize;//sizeoftable

ObjectcurrentEntry;//currentlyselectedtableentry

3.5.初始化(Initialization)

尽量在声明局部变量的同时进行初始化。

唯一不这么做理由是变量的初始值依赖于某些先前发生的计算。

如果类存在父类,且父类没有被初始化,先初始化父类。

             注意:

初始化父类时第一被初始化的类永远是object类,父类总在子类之前被初始化。

   如果类存在一个初始化对象,就执行该方法。

  除接口以外,初始化一个类之前必须保证其直接超类已被初始化,并且该初始化过程是由Jvm保证线程安全的。

另外,并非所有的类都会拥有一个()方法,在以下条件中该类不会拥有()方法:

该类既没有声明任何类变量,也没有静态初始化语句;

该类声明了类变量,但没有明确使用类变量初始化语句或静态初始化语句初始化;

该类仅包含静态final变量的类变量初始化语句,并且类变量初始化语句是编译时常量表达式。

    注意:

()方法类变量初始化语句和类型的静态初始化语句与在类中声明的顺序一致

     类初始化后,即可调用它的静态方法,或者创建实例。

父类静态初始化---->子类静态初始化---->父类初始化块---->父类构造方法---->子类初始化块---->子类构造方法。

3.6.布局(Placement)

只在代码块的开始处声明变量(一个块是指任何被包含在大括号“{”和“}”中间的代码)。

不要在首次用于该变量时才声明之,这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性。

voidmyMethod(){

intint1=0;

if(condition){

intint2=0;

}

}

该规则的一个例外是for循环的索引变量

for(inti=0;I

避免声明的局部变量覆盖上一级声明的变量。

例如,不要在内部代码块中声明相同的变量名:

intcount;

myMethod(){

if(condition){

intcount=0;//AVOID

}

}

3.7.简单语句(SingleStatement)

每行至多包含一条语句,例如:

argv++;//Correct

argc--;//Correct

argv++;argc--;//AVOID!

3.8.复合语句(CompoundStatements)

复合语句是包含在大括号中的语句序列,形如“{语句}”。

例如下面各段。

◆被括其中的语句应该较之复合语句缩进一个层次。

◆左大括号“{”应位于复合语句起始行的行尾;右大括号“}”应另起一行并与复合语句首行对齐。

◆大括号可以被用于所有语句,包括单个语句,只要这些语句是诸如if–else或for控制结构的一部分。

这样便于添加语句而无需担心由于忘了加括号而引入bug.

3.9.返回语句(returnStatements)

个带返回值的return语句不使用小括号“()”,除非它们以某种方式使返回值更显见。

例如:

return;

returnmyDisk.size();

return(size?

size;defaultSize);

3.10.for语句(forStatements)

一个for语句应该具有如下格式:

for(initialization;condition;update){

statements;

}

一个空的语句(所有工作都在初始化,条件判断,更新子句中完成)应该具有如下格式:

for(initialization;condition;update);

当在for语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。

若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。

3.11.while语句switch(whileStatements)

一个while语句应该具有如下格式:

while(cond

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

当前位置:首页 > 解决方案 > 学习计划

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

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