Java编程规范.docx
- 文档编号:151301
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:18
- 大小:23.46KB
Java编程规范.docx
《Java编程规范.docx》由会员分享,可在线阅读,更多相关《Java编程规范.docx(18页珍藏版)》请在冰点文库上搜索。
Java编程规范
[Java编程规范]
目录
1.为什么要制定编码规范?
3
2.JAVA编码规范3
2.1程序编写规范3
2.2排版规范3
2.3测试维护4
2.4JAVA文件样式4
2.5可读性7
2.6性能7
2.7命名规范8
2.8代码编写格式9
2.9注释规范10
2.10代码编译12
3.显示层页面编码规范14
3.1显示层页面样式(草案)14
4.参考资源16
Java编程规范
1.为什么要制定编码规范?
●● 代码规范相当重要.代码规范提高软件代码的可读性,使得开发人员快速和彻底的理解新代码.
●● 好的代码风格不仅会提高可读性,而且会使代码更健壮,更为重要的是在修改时不容易出错.
●● 在现代软件开发中,维护工作会占用80%的时间,而且开发者和维护者通常不是同一个程序员.这意味着你经常要阅读和修改别人开发的程序,别人也同样可能需要阅读和修改你开发的程序.既然如此,为什么不把这利人利己的事情作好呢?
一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。
2.JAVA编码规范
2.1程序编写规范
●● 异常
对于程序级错误,应该创建相应的异常类,这在一些框架(譬如:
struts)支持异常处理机制的时候特别推荐要使用的。
如:
UserNotFoundException
●● 垃圾收集
不要让我们可能是在随心所欲的情况下建立的对象自生自灭,不用的对象,我们应该让垃圾回收器知道它是可以被回收的。
2.2排版规范
●● 关键词和操作符之间加适当的空格。
●● 相对独立的程序块与块之间加空行。
●● 较长的语句、表达式等要分成多行书写。
●● 划分出的新行要进行适应的缩进,使排版整齐,语句可读。
●● 长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
●● 循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。
●● 若函数或过程中的参数较长,则要进行适当的划分。
●● 不允许把多个短语句写在一行中,即一行只写一条语句。
●● 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。
●● C/C++语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
如果你使用比较优秀的IDE,譬如:
eclipse,那么在你完成你的代码以后,只要注意“format”一下就可以达到上边的效果。
2.3测试维护
●● 单元测试要求至少达到语句覆盖。
●● 单元测试开始要跟踪每一条语句,并观察数据流及变量的变化。
●● 清理、整理或优化后的代码要经过审查及测试。
●● 代码版本升级要经过严格测试。
2.4JAVA文件样式
所有的Java(*.java)文件都必须遵守如下的样式规则:
●● 版权信息
版权信息必须在java文件的开头,比如:
/*
*Copyright?
2000ShanghaiXXXCo.Ltd.
*Allrightreserved.
*/
其他不需要出现在javadoc的信息也可以包含在这里。
●● Package/Imports
package行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。
如果import行中包含了同一个包中的不同子目录,则应该用*来处理。
package.stats;
importjava.io.*;
importjava.util.Observable;
importhotlava.util.Application;
这里java.io.*使用来代替InputStreamandOutputStream的。
●● Class
接下来的是类的注释,一般是用来解释类的。
/**
*Aclassrepresentingasetofpacketandbytecounters
*Itisobservabletoallowittobewatched,butonly
*reportschangeswhenthecurrentsetiscomplete
*/
接下来是类定义,包含了在不同的行的extends和implements
publicclassCounterSet
extendsObservable
implementsCloneable
●● ClassFields
接下来是类的成员变量:
/**
*Packetcounters
*/
protectedint[]packets;
public的成员变量必须生成文档(JavaDoc)。
proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。
●● 存取方法
接下来是类变量的存取的方法。
它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。
/**
*Getthecounters
*@returnanarraycontainingthestatisticaldata.Thisarrayhasbeen
*freshlyallocatedandcanbemodifiedbythecaller.
*/
publicint[]getPackets(){returncopyArray(packets,offset);}
publicint[]getBytes(){returncopyArray(bytes,offset);}
publicint[]getPackets(){returnpackets;}
publicvoidsetPackets(int[]packets){this.packets=packets;}
其它的方法不要写在一行上
●● 构造函数
接下来是构造函数,它应该用递增的方式写(比如:
参数多的写在后面)。
访问类型("public","private"等.)和任何"static","final"或"synchronized"应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。
public
CounterSet(intsize){
this.size=size;
}
●● 克隆方法
如果这个类是可以被克隆的,那么下一步就是clone方法:
public
Objectclone(){
try{
CounterSetobj=(CounterSet)super.clone();
obj.packets=(int[])packets.clone();
obj.size=size;
returnobj;
}catch(CloneNotSupportedExceptione){
thrownewInternalError("UnexpectedCloneNotSUpportedException:
"+e.getMessage());
}
}
●● 类方法
下面开始写类的方法:
/**
*Setthepacketcounters
*(suchaswhenrestoringfromadatabase)
*/
protectedfinal
voidsetArray(int[]r1,int[]r2,int[]r3,int[]r4)
throwsIllegalArgumentException
{
//
//Ensurethearraysareofequalsize
//
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);
}
●● toString方法
无论如何,每一个类都应该定义toString方法:
public
StringtoString(){
Stringretval="CounterSet:
";
for(inti=0;i retval+=data.bytes.toString(); retval+=data.packets.toString(); } returnretval; } } 2.5可读性 ●● 避免使用不易理解的数字,用有意义的标识来替代。 ●● 不要使用难懂的技巧性很高的语句。 ●● 源程序中关系较为紧密的代码应尽可能相邻。 2.6性能 ●● 在写代码的时候,从头至尾都应该考虑性能问题。 这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。 比如: 如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。 不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。 ●● 不必要的对象构造 1.1. 不要在循环中构造和释放对象 2.2. 使用StringBuffer对象 在处理String的时候要尽量使用StringBuffer类,StringBuffer类是构成String类的基础。 String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。 当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。 比如: 如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和她的append()方法。 如果我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。 ●● 避免太多的使用synchronized关键字 避免不必要的使用关键字synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。 2.7命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。 (这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性) 较短的单词可通过去掉“元音”形成缩写; 较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 使用匈牙利表示法。 ●● Package的命名 Package的名字应该都是由一个小写单词组成。 packagecom.neu.util ●● Class的命名 Class的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。 publicclassThisAClassName{} ●● Class变量的命名 变量的名字必须用一个小写字母开头。 后面的单词用大写字母开头 userName,thisAClassMethod ●● StaticFinal变量的命名 staticFinal变量的名字应该都大写,并且指出完整含义。 /** *DBConfigPATH **/ publicstaticfinalString DB_CONFIG_FILE_PATH="com.neu.etrain.dbconfig"; ●● 参数的命名 参数的名字必须和变量的命名规范一致。 ●● 数组的命名 数组应该总是用下面的方式来命名: byte[]buffer; 而不是: bytebuffer[]; ●● 方法的参数 使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: SetCounter(intsize){ this.size=size; } 2.8代码编写格式 ●● 代码样式 代码应该用unix的格式,而不是windows的(比如: 回车变成回车+换行) ●● 文档化 必须用javadoc来为类生成文档。 不仅因为它是标准,这也是被各种java编译器都认可的方法。 使用@author标记是不被推荐的,因为代码不应该是被个人拥有的。 ●● 缩进 缩进应该是每行2个空格.不要在源文件中保存Tab字符.在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度. 如果你使用UltrEdit作为你的Java源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符,方法是通过UltrEdit中先设定Tab使用的长度室2个空格,然后用Format|TabstoSpaces菜单将Tab转换为空格。 ●● 页宽 页宽应该设置为80字符.源代码一般不会超过这个宽度,并导致无法完整显示,但这一设置也可以灵活调整.在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行.一条语句折行后,应该比原来的语句再缩进2个字符. ●● {}对 {}中的语句应该单独作为一行.例如,下面的第1行是错误的,第2行是正确的: if(i>0){i++};//错误,{和}在同一行 if(i>0){ i++ };//正确,{单独作为一行 }语句永远单独作为一行. 如果}语句应该缩进到与其相对应的{那一行相对齐的位置。 ●● 括号 左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格.下面的例子说明括号和空格的错误及正确使用: CallProc(AParameter);//错误 CallProc(AParameter);//正确 不要在语句中使用无意义的括号.括号只应该为达到某种目的而出现在源代码中。 下面的例子说明错误和正确的用法: if((I)=42){//错误-括号毫无意义 if(I==42)or(J==42)then//正确-的确需要括号 2.9注释规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。 (这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)。 Java的语法与C++及为相似,那么,你知道Java的注释有几种吗? 是两种? //注释一行 /*......*/注释若干行 不完全对,除了以上两种之外,还有第三种,文档注释: /**......*/注释若干行,并写入javadoc文档 ●● 注释要简单明了。 StringuserName=null;//用户名 ●● 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。 ●● 在必要的地方注释,注释量要适中。 注释的内容要清楚、明了,含义准确,防 止注释二义性。 保持注释与其描述的代码相邻,即注释的就近原则。 ●● 对代码的注释应放在其上方相邻位置,不可放在下面。 对数据结构的注释应放在 其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方; 同一结构中不同域的注释要对齐。 ●● 变量、常量的注释应放在其上方相邻位置或右方。 ●● 全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以 及存取时注意事项等的说明。 ●● 在每个源文件的头部要有必要的注释信息,包括: 文件名;版本号;作者;生成日 期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文 件关系等);主要函数或过程清单及本文件历史修改记录等。 /** *CopyRightInformation: NeusoftIIT *Project: eTrain *JDKversionused: jdk1.3.1 *Comments: configpath *Version: 1.01 *Modificationhistory: 2003.5.1 *SrDateModifiedByWhy&Whatismodified *1.2003.5.2KevinGaonew **/ ●● 在每个函数或过程的前面要有必要的注释信息,包括: 函数或过程名称;功能描 述;输入、输出及返回值说明;调用关系及被调用关系说明等 /** *Description: checkout提款 *@paramHashtablecartinfo *@paramOrderBeanorderinfo *@returnString */ publicStringcheckout(HashtablehtCart, OrderBeanorderBean) throwsException{ } ●● javadoc注释标签语法 @author对类的说明标明开发该类模块的作者 @version对类的说明标明该类模块的版本 @see对类、属性、方法的说明参考转向,也就是相关主题 @param对方法的说明对方法中某参数的说明 @return对方法的说明对方法返回值的说明 @exception对方法的说明对方法可能抛出的异常进行说明 2.10代码编译 1.编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。 2.同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。 3.合理地设计软件系统目录,方便开发人员使用。 4.打开编译器的所有告警开关对程序进行编译。 5.在同一项目组或产品组中,要统一编译开关选项。 6.使用工具软件(如VisualSourceSafe)对代码版本进行维护。 3.显示层页面编码规范 ●● 整个jsp/jspbean表示层应当尽可能的瘦和简单化。 ●● 牢记大多数的JSP都应当是只读的视图,而由页面bean来提供模型。 ●● 在尽可能合理的情况下,把业务逻辑从JSP中移走。 具体于HTTP的逻辑(如,对Cookie的处理)属于bean或支持类中,而不是JSP中。 ●● 尽量把条件逻辑放在控制器中而不是放在视图中。 ●● 在使用mvcframework,譬如: struts的时候,尽量使用strutstaglib来完成view层的组织。 参考团队成员jony完成的strutstaglib介绍文档。 3.1显示层页面样式(草案) 为了跟.java文件一样,能够给出一个详细的样式摸板。 ●● 声明 如: <%@pagecontentType="text/html;charset=gb2312"language="java"%> ●● 引入strutstaglib文件 如: <%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%> <%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%> <%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%> ●● 页面体 如一个表单: formaction="/test.do"method="post"> hiddenproperty="act"value="bb"/> linkpage="/test.do? act=list&intPage=1">list link> textproperty="id"/> messagekey="user.name"/>: textproperty="name"/>ID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编程 规范