java编码规范.docx
《java编码规范.docx》由会员分享,可在线阅读,更多相关《java编码规范.docx(11页珍藏版)》请在冰豆网上搜索。
![java编码规范.docx](https://file1.bdocx.com/fileroot1/2023-1/14/574a38a7-2fe5-47d8-9d51-d7c1dca58999/574a38a7-2fe5-47d8-9d51-d7c1dca589991.gif)
java编码规范
思创信息科技
JAVA编码规范
Ver2011
1. 介绍/说明
1.1 声明
本文档内容描述思创JAVA编码规范,凡是在思创开发的JAVA程序必须按照此文档规定。
1.2 为什么要有编码规范
编码规范对于开发人员来说是非常重要的,有以下几个原因:
Ø 一个软件的生命周期中,80%的花费在于维护
Ø 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
Ø 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
Ø 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
2. 目标
Ø 为来自不同的项目组或个人提供标准的代码格式。
Ø 增加易读性。
3. 命名规定
命名规范使程序更易读,从而更易于理解。
它们也可以提供一些有关标识符意图的信息,有助于开发人员理解代码。
3.1 包的命名
包的命名应该都是小写字母,单词之间用“.”分开。
所有的JAVA文件必须建立在com.sc包下。
例如:
packagecom.sc.water.system;
packagecom.sc.cctv.system;
3.2 类的命名
类的命名应该都是名词,第一个字母都要大写,其他每个单词的第一个字母都要大写。
要用完整的单词,除非是被公认的单词缩写。
例如:
classContainer
classShippingLine
3.3 接口的命名
接口的命名应该都是名词或形容词,第一个字母为I第一个单词的字母都要大写,其他每个单词第一个字母都要大写。
要用完整的单词,除非是被公认的单词缩写。
例如:
interfaceIContainerOwner
interfaceIRunnable
3.4 方法的命名
方法的命名应该都用动词或是惯用短语描述,第一个字母都要小写,其他每个单词第一个字母都要大写。
例如:
run()
changeLocationTo()
getContainerId()
3.5 变量的命名
所有非静态变量名的第一个字母都要小写,其他每个单词的第一个字母都要大写。
命名应尽量简单并且要有意义。
变量名的选用应该易于记忆,能够指出其用途。
尽量避免单个字符的变量名,除非是一次性的临时变量。
临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。
下面是一些正确的变量命名例子:
intnumOfContainers
StringcontainerId;
Datetoday;
3.6 常量命名
对于静态的final变量,在命名的时候每一个单词都要大写,单词之间用“_”分开。
例如:
finalstaticMIN_WIDTH=4;
finalstaticDEFAULT_CONTAINER_SIZE=20;
3.7 JSP文件的命名
JSP页面命名采用camel标记法;
包括css和JavaScript文件命名同jsp文件
findExpertCheckState.jsp
3.8 附加说明
Ø从命名中可以直观看懂其定义和用途,否则必须增加注释说明;
Ø在同一系统内命名必须保持统一;避免出现类似示例中的情况;
Ø示例:
项目组id变量定义:
pgid、projectgroupId、idprojectgroup、idProjGroup
Ø特殊约定名词可以直接使用缩写kxx或rws等,但必须在设计文档中准确说明;
Ø避免名字过长、命名采用英文缩写,避免使用汉语拼音【推荐】。
3.8 推荐的命名
3.8.1 类名推荐
当要区别接口和实现类的时候,可以在类的后面加上“Impl”。
例如:
interfaceContainer
classContainerImpl
classContainer3PImpl
classContainerYICTImpl
3.8.2 Exception类名推荐
Exception类最好能用“Exception”做为类命名的结尾。
例如:
DataNotFoundException
InvalidArgumentException
3.8.3 抽象类名推荐
抽象类最好能用“Abstract”做为类命名的开头。
例如:
AbstractBeanDefinition
AbstractBeanFactory
3.8.4 Test类名推荐
Test类最好能用“Test”做为类命名的结尾。
例如:
ContainerTest
3.8.5 工厂类方法推荐
工厂方法最好能把该方法做要创建的对象类型描述出来。
例如:
publicContainercreateContainer();
publicLocationnewLocation();
4. Java文件组织
一个文件由被空行分割而成的段落以及标识每个段落的可选注释共同组成。
超过2000行的程序难以阅读,所以一个java程序文件中的代码行数不能超过2000行,除非有特殊原因。
每个Java源文件都包含一个单一的公共类或接口。
若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件。
公共类必须是这个文件中的第一个类或接口。
Java源文件还遵循以下规则,这个规则规定了java程序段落的顺序:
- 开头注释
- 包和引入语句
- 类和接口声明
5. JAVA文件声明顺序
类或接口应该按以下顺序声明:
Ø 包的定义
Ø impot类(输入包的顺序、避免使用*)
∙ 输入包应该按照java.*.*,javax.*.*,org.*.* ,com.*.*的顺序import
∙ 在import的时候不应该使用*(例如:
java.util.*)
Ø 类或接口的定义
Ø 静态变量定义,按public,protected,private顺序
Ø 实例变量定义,按public,protected,private顺序
Ø 构造方法
Ø 方法定义顺序按照public方法(类自己的方法),实现接口的方法,重载的public方法,受保护方法,包作用域方法和私有方法。
建议:
类中每个方法的代码行数不要超过100行。
Ø 内部类的定义
6. JAVA文件格式缩进定义
6.1 缩进尺寸
使用TAB缩进,不允许使用空格缩进。
6.2 行的尺寸
每行不要超过80个字符。
6.3 行的格式定义
当一行表达式不能在一行内显示,请按下列顺序要求拆行:
Ø 在“(”或“=”符号后拆行
Ø 在“,”拆行
Ø 在一个操作符后拆行
Ø 把并发的拆行放到同一级别上的缩进
Ø 如果在拆行中再次拆分的时候遇到“(”,应该新拆出来的行放在更远的一个缩进级别上
例如:
methodWithLongName(
expression1,expression2,expression3,
expression4,expression5);
var=
method1(
expression1,expression2,
method2(
expression3,expression4));
7. 注释
Java有两种注释方法。
“/*Thisisacomment*/”或 “//Thisisacomment”
第一种应该被用到写JavaDoc上,并且都用“/**”开头。
第二种适合于在做部分代码的注释,但只适合做非常短内容的注释。
8. 声明
8.1 变量声明
推荐每行声明一个变量,并加注释。
例如:
intcount; //numberofcontainers
intsize; //sizeoftable
intcount,size; //AVOIDTHIS!
数组声明应该采用前缀方式。
例如:
int[]table;
String[]args;
8.2 类或接口声明
Ø “{”和声明语句在同一行。
Ø 如果不能在同一行显示,就将“extends”或“implements”进行拆行,并放在两个缩进级别后。
Ø “}”符号应该独自占一行。
例如:
publicclassManagerextendsEmployee{
...
}
publicclassChiefExecutiveOfficer
extendsManager
implementsPerson{
...
}
8.3 方法声明
Ø “{”和声明语句在同一行。
Ø “}”符号应该独自占一行。
例如:
publicintmyMethod(inti,intj){
...
}
9. 语句格式
9.1 return语句
return 后面的value在比较明显的时候不要用“()”。
例如:
return;
returnmyDisk.size();
return(size?
size:
defaultSize);
9.2 if,if-else,if-else-if-else 语句
例如:
if(condition){
statements;
}
if(condition){
statements;
}
else{
statements;
}
if(condition){
statements;
}
elseif(condition){
statements;
}
elseif(condition){
statements;
}
9.3 for 语句
例如:
for(initialization;condition;update){
statements;
}
9.4 while语句
例如:
while(condition){
statements;
}
9.5 do-while语句
例如:
do{
statements;
}
while(condition);
9.6 switch语句
例如:
switch(condition){
caseABC:
statements;
caseDEF:
statements;
break;
caseXYZ:
statements;
break;
default:
statements;
break;
}
9.7 try-catch语句
例如:
try{
statements;
}
catch(ExceptionClasse){
statements;
}
finally{
statements;
}
10. JavaDoc的格式定义
10.1 文件头
应该包括Copyright,文件版本等信息。
例如:
/**
*@Copyright腾达万城科技2011
*@Title:
${file_name}
*@Package${package_name}
*@Description:
${todo}(用一句话描述该文件做什么)
*@authorA18ccmsA18ccms_gmail_com
*@date${date}${time}
*@versionV1.0
*/
@author对类的说明标明开发该类模块的作者
@version对类的说明标明该类模块的版本
@see对类、属性、方法的说明参考转向,也就是相关主题
@param对方法的说明对方法中某参数的说明
@return对方法的说明对方法返回值的说明
@exception对方法的说明对方法可能抛出的异常进行说
@deprecated对类或方法的说明该类或方法不建议使用
10.2 类说明信息
范围:
所有java类,可以不包括javabean
书写规范:
类的注释必须写在该类的声明语法之前。
在注释中要描述该类的描述,创建者,创建日期,和CVS相关的最后commit时间、人和版本等信息。
类注释模板:
可以通过eclipse配置(CodeTemplates中的Code的NewJavafiles)
${filecomment}
${package_declaration}
/**
*@ClassName:
${type_name}
*@Description:
${todo}(这里用一句话描述这个类的作用)
*@authorA18ccmsa18ccms_gmail_com
*@date${date}${time}
*
*${tags}
*/
${typecomment}
${type_declaration}
类注释示例:
packagecn.sc.sstic.projectmanagement.projectfeasibleschemaeval;
/**
*Title:
mwbas2008
*Description:
可行性方案套数数组定义类
*CreateDateTime:
Oct6,20084:
41:
03PM
*CVSlastmodifyperson:
$Author:
lwc$
*CVSlastmodifyDateTime:
$Date:
2008/09/1802:
33:
42$时间需+8小时
*CVSlastversion:
$Revision:
1.22$
*
*@author聂浩
*/
10.3 变量定义
目的:
简单描述该变量、常量的意义。
书写规范:
变量、常量注释必须写在变量、常量定义之前或同一行中,简单描述其代表的意义。
注:
对自循环所用的变量(i,j,k,)可以不需要注释。
示例:
StringcommitFlag;//提交标志
10.4 方法定义
目的:
简要概述该方法的功能,包括其参数、返回值意义的注释
注:
如果参数的命名已非常清楚的情况下,可以不写注释
范围:
java类中的各种方法
注:
接口的实现方法的注释应写在接口中而不是实现代码中;
对自动生成的get/set方法不需要添加注释;
如果方法允许null作为参数,或者允许返回值为null,必须在JavaDoc中说明,如果没有说明,方法的调用者不允许使用null作为参数,并认为返回值是null安全的。
书写规范:
方法注释必须写在方法定义之前。
该注释包括:
方法其功能的简单描述,方法的参数、返回值类型、返回值意义简单的描述。
模板:
对于已定义好的接口的方法,可以直接输入/**回车eclipse可自动生成注释模板.
/**
*@Title:
${enclosing_method}
*@Description:
${todo}(这里用一句话描述这个方法的作用)
*@param${tags} 设定文件
*@return${return_type} 返回类型
*@throws
*/
@author对类的说明标明开发该类模块的作者
@version对类的说明标明该类模块的版本
@see对类、属性、方法的说明参考转向,也就是相关主题
@param对方法的说明对方法中某参数的说明
@return对方法的说明对方法返回值的说明
@exception对方法的说明对方法可能抛出的异常进行说
@deprecated对类或方法的说明该类或方法不建议使用
类与方法的注释必须每个方法和类都写。