《Java编码规范XX0923.docx》由会员分享,可在线阅读,更多相关《Java编码规范XX0923.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java编码规范XX0923修订历史记录日期版本说明作者审核人2011-7-11对Java代码风格、注释、命名、 声明等规范进行描述黎建宁2011-8-5根据征询意见对Java编码规范 进行修订黎建宁、冯彬杰、 张史沛、李思行2011-8-16对规范中出现模糊定义的地方 进行细化描述黎建宁2011-9-13根据编码的约定情况,对注释、 声明部分进行了补充黎建宁、李思行2011-9-20对方法的声明顺序进行补充黎建宁、李思行1t修改apache中的commons包的copyProperties方法,添加过滤控制* * 如从一个对象中拷贝pl属性,使用如下:* copyProperties(des
2、tz orgi, new Predicate()* public boolean evaluate(Object obj) * if (obj . toString () .equals (,rpl,r) * return true;* * * 根据Predicate的不同实现,可以组合拷贝属性*畲param dest目标对象* param orgi源又寸象* param pre Predicate断言,如果为NULL,则拷贝所有属性* 0throws FrameworkExcepcion*/public static void copyProperties(Object dest, Obje
3、ct orgiz Predicate pre) throws Frameworl5、对规范中约定的方法,如回调方法、getter/setter方法,只要遵守其命令约定,均不需要编写注释。【注:非强制执行】参考例子:rightControlExtService.login.addEventListener(ResultEvent.RESULT, loginCallBack); rightControlExtService.login.addEventListener(FaultEvent.FAULT, faultCallback);public IProcessVariableService g
4、etProcessVariableService() (return processVariableService;public void setProcessVariableService(IProcessVariableService processVariableService)this.processVariableService processVariableService;6、假如方法内部涉及复杂的算法、关键步骤或者难以懂得的语句,应当添加注释标明其含义。【注:非强制执行,属加分项】7、关于超过一行注释,务必使用“/*/”进行标注,而单行注释可使用“” 标注。【注:强制执行】5变量
5、1、全局变量、静态变量、类中的字段应当带有注释。【注:强制执行】 参考例子:*附件名称,为上传附件的原文件名private String name;文件名称,附件上传后会重新命名进行保存*/private String fileName;2、对规范中约定的变量,如注入对象(如Service. DAO),通讯对象(如 RemoteObject),只要遵守其命令约定,均不需要编写注释。【注:非强制执行, 属加分项】参考例子:SAutouired(required = false) 0Qualifier(attachmentDAO) private IAttachmentDAO attachment
6、DAO;Aut.ouired (required = false)Qualifier (,rlobServiceM) private ILOBService lobService;private var systemService:RemoteObject; private var rIghtControlExtService:RemoteObject;3、关于方法内部产生的临时变量,应当尽量添加注释,标明其中的作用。四命名1基本原则1、文件,类,函数,变量,命名务必使用可准确表达其意义的英文单词。2、命名不能与关键字相同。【注:强制执行】3、尽量避免使用出现误解的词汇。4、不同意使用拼音命名
7、,全部使用英文单词或者缩写命名。【注:强制执行】2文件、包1、文件名第一字母应大写。【注:强制执行】国出访访团Attachment, javaCode, j avaSystemHelp. javaSystemVar. j avaSystemVarConstants. j ava2、文件名应尽量描述该文件作用。【注:非强制执行,但使用拼音命名需扣 分】3、文件名应使用名词或者形容词+名词。【注:强制执行】4、包名通常以项目或者模块名进行命名,使用小写。【注:强制执行】5、包名构成规则基本包.项目名模块名M子模块名【注:强制执行】 参考例子:3 3 甲甲由由时时-田一com. gdtopway.
8、common, basic. aop com. gdtopway. common, basic, dao com. gdtopway. common, basic. dao. impl icom. gdtopway. common, basi c. domain i *com. gdtopway. common, basic. exception com. gdtopway. common, basic, service com. gdtopway. common, basic. service. impl com. gdtopway. common, basic. servlet6、禁止把类
9、直接定义在默认包下。下列行为务必禁止:【注:强制执行】S 15 srcb 田 (default package) J Test. javacom. gdtopway. common, basic. aopcom. gdtopway. common, basic. dao田田田一3类、接口1、类、接口名第一字母应大写。【注:强制执行】2、类名应尽量描述该类作用。【注:强制执行】3、类名应使用名词或者形容词+名词。【注:强制执行】4、假如需要用到多个单词表达其意义,每个单词第一个字母务必用大写标 识。【注:强制执行】参考例子:aaa国团团fi团a国a jasss办办由甲甲国BeanUtils. j
10、ava ClassUtils. java Collect!onUtils. java DateUtils. j ava DateUtilsBean. java FileUtils. java ListUtils. java ObjectUtils. java PinyinUtil. java SQLUtils. java StringUtils. java5、类名不使用下划线。【注:强制执行】6、假如用到某些特定名词作为类名,应保持该特定名词,如“ADOHelper”。 【注:强制执行】7、接口的第一个字母应为“I”,其他命名规则与普通类名相同。【注:强制 执行】8、关于DAO类,其命名规则为
11、:名词+“DAO”,关于应用服务类,其命 名规则为:名词+ “Service”。【注:强制执行】9、假如类为持久类,需要与数据库表进行绑定的,其命名在忽略前缀与下 划线等特殊字符的情况下,应与数据库表名保持一致。【注:强制执行】下列行为务必禁止:xnipojL- l java. J.O. aet ci-LZciDtJ;Entityjavax persistence.SequenceGenerator(name= SEQ_QUALITATI T|abl.e (温me = EVALUATE_UN工T工NFO”|)org.hibernate.annotations.Entity(dynamiclns
12、ert=true dyrpublic class :nformationUni : implements Serializable/ private static final long serialVersionUID = -E4字段1、字段名第一字母应小写。【注:强制执行】2、字段名应尽量描述该字段的作用。【注:强制执行】3、字段名应使用名词或者形容词+名词。【注:强制执行】4、假如需要用到多个单词表达其意义,除第一个字母外,每个单词第一个字母务必用大写标识。【注:强制执行】5、假如字段所在类为持久类,需要与数据库表进行绑定的,其命名在忽略 前缀与下划线等特殊字符的情况下,应与数据库字段名保
13、持一致。【注:强制执 行】5方法1、方法名第一字母应小写。【注:强制执行】2、方法名应尽量描述该方法的作用。【注:强制执行】3、方法名应使用“动词+名词”形式命名。【注:强制执行】4、假如需要用到多个单词表达其意义,除第一个单词外,其他单词第一个 字母务必用大写标识。【注:强制执行】5、关于常用的DAO查询方法,方法应当说明方法出处、数据的来源与查 询根据。如getOrderListByCustomer方法根据顾客获取订单列表,此方法由Order 模块提供而不是Customer模块。注:(1)强制执行,但条件定义为非强制执行, 即 getOrderListByCustomer 中的 ByCus
14、tomer 为非强制执行】6、回调方法应使用“Callback”作为方法后缀,如非特殊回调方法,可使用 “调用方法+Callback”命名规则,如login方法回调,其方法命名为loginCallbacko 【注:强制执行】7、Flex各类事件,使用“on”作为方法前缀命名,如非特殊事件,可使用 “ on+方法名”命名规则,如createComplete事件中,其方法命名为 onCreateComplete,假如存在多个相同的事件,使用“on+组件ID+方法名”命名 规则。【注:强制执行】6变量1、变量名第一字母应小写。【注:强制执行】2、变量名应尽量描述该变量的作用。3、变量名通常使用“形容
15、词+名词”或者单个名词,布尔变量应使用含有 “推断意义的单词+名词”,比如推断是否已关闭的变量:boolean isClosed,禁 止声明类似aaa、bb无法定义、懂得的变量。【注:强制执行】4、假如需要用到多个单词表达其意义,除第一个单词外,其他单词第一个字母务必用大写标识。【注:强制执行】5、用于for循环的局部变量可使用i等单个字母。【注:非强制执行】7常量1、常量名应尽量描述该常量的作用。【注:非强制执行,但使用拼音命名需 扣分】2、常量名通常使用“形容词+名词”或者单个名词。【注:强制执行】3、假如需要用到多个单词表达其意义,单词间应通过分割。【注:强 制执行】参考例子:/畲*St
16、ruts中文资源文件路径*/public static final String S TR UTS_MESSAGE_ CN_ PA TH = ,rApplicatioSuucs中文资源文件对应的Properties,方便统一获取*/public static final Properties PROP = PropertiesUtils. getProperI用户视图名,通过该名从session中获取登陆用户信息*/public static final String USER_VTEW = ,USER_VIEWf,;8组件变量1、组件变量符合变量命名规则。【注:强制执行】2、组件变量名通常使
17、用组件前缀+变量名命名。【注:强制执行,表单内的组 件变量非强制执行】3、通常情况下,组件前缀可使用组件缩写(见本章第9节Flex命名约定表) 或者全名表示,但关于过长的组件命名,建议使用缩写标识。(新增的务必执 行)【注:强制执行,因考虑其对旧项目的改动性太大,故该考核只针对新增的 代码模块,其中Flex命名约定表里的组件若需要缩写标识,则务必是Flex命名约定 表中对应的缩写标识】4、关于某些显示数据库字段的控件,其变量名应对应数据库字段名。【注: 强制执行】9附Flex命名约定表组件全名组件名称缩写Controls 类:AdvancedDataGridadgAlertalButtonbt
18、nCheckBoxchkColorPickercrpComboBoxcmbDataGriddgDateChooserdeDateFielddfHSliderhslHorizontalListhorlstImageimgLabelIblLinkButtonInkbtnList1stNumericSteppernsOLAPDataGridodgPopUpButtonpubPopUpMenuButtonpumbProgressBarprgRadioButtonrdoRadioButtonGrouprdogRichTextEdi torrtxSWFLoaderswflTexttxTextAreatxa
19、TextinputtxiTileList111TreetreVSlidervslVideoDisplayvdpLayout 类:ApplicationControlBaracb注意:基于约定优于配置原则,若规范中定义的命名规则与组件约定的规则 存在冲突,以组件约定的规则为优先。CanvasCVSControlBarctbFormfmFormHeadingfmhGridgdHBoxhbHDividedBoxhdbHrulehrModuleLoadermdlPanelpnlSpacerspcTiletilTitleWindowtilwVBoxvbVDividedBoxvdbVRulevrNavig
20、ators 类:AccordionaodButtonBarbtnbLinkBarIkbrMenuBarmnbTabBartabTabNavigatortbnToggleButtonBartbbViewStackvskCharts 类:AreaChartarecBarChartbareBubbleChartbubcCandlestickChartcancColumnChartcoleHLOCCharthloccLegendIgdLineChartlinePieChartpiecPlotChart 自定义组件ploc根据基础组件进行自定 义组合参考例子:mx: Text Input id=,f r
21、m_publisher,r text=,( this五声明1类、接口1、可见性务必显式声明。【注:强制执行】2方法1、可见性务必显示声明。【注:强制执行】2、尽可能减少类与类之间耦合,尽量限制成员函数的可见性(不要扩大其 可见范围)。【注:非强制执行,属加分项】3、假如存在多个参数,按照功能的相似性,应放到一齐。【注:强制执行】4、关于同样可见性的方法,按照功能的相似性,应放到一齐。(如as中应 当将事件、回调方法、引用方法区分存放)。【注:强制执行】5、关于重载的方法,按参数的个数,从少到多排序。【注:强制执行】6、方法按照其属性与可见性,按下列顺序排序:构造方法、静态公共方法、 静态私有方
22、法、受保护方法、私有方法、与继承自Object的方法(as代码按照 实际情况进行调整)。【注:强制执行】7、方法的声明顺序按照下列优先级声明:功能相似性可见性参数 个数列子:public void saveUser(User user)public void saveUser(User user, Long orgld)public void saveUsers(List user, Long orgld. Long stationld)private void saveUsers(List user)【注:强制执行】3字段1、不要把字段声明为公有,应当设置为私有,通过getter与sette
23、r访问(仅 针对Java)。【注:强制执行】2、非同级变量不能使用一样或者者相近的名字。如five, fineo【注:强制 执行】3、变量按照其属性与可见性,按下列顺序排放:常量、类变量、实例变量、 公有字段、受保护字段、私有字段、能够将私有变量声明在类或者接口的最后(as 代码按照实际情况进行调整)。【注:强制执行】4、字段应通过this、super显式调用。【注:强制执行】4变量1、方法中的变量在声明时务必带有初始值,关于无法初始化的变量,可定 义为null (不含字段)。【注:强制执行】2、变量应在其使用时进行定义,减少变量作用域与作用范围,禁止变量定 义后没有使用。【注:非强制执行,但
24、出现定义的变量没有使用这种情况,需要 扣分】六特殊处理1、凡涉及到创建实例,使用数据库对象,使用事务对象,使用COM+对象, 使用线程对象,操作网络连接等代码,均应使用“try-catch”对或者throws命令。 【注:强制执行】2、凡涉及代码可能抛出特殊的,均应使用“try-catch”对或者throws命令。 【注:强制执行】3、捕捉CheckedExcepiion类特殊(直接集成自Exception)时,务必输出全一简介1目的本规范的目的是使开发人员以标准的、规范的方式编写代码,养成良好的编 码风格与习惯,形成公司内部编码约定,提高程序的可读性,可保护性与一致性, 同时减少项目构成员间
25、技术沟通成本,提高团队开发效率。2范围1、本文档基于Javal.5的语法描述编码规范。2、本文档从代码风格、注释、命名、声明与特殊处理等五个方面对Java编 码进行约定。3、本规范适用于所有运用Java技术的软件项目、产品。4、本规范适用的文件类型包含但不限于Java源文件、JSP文件、XML文件、 HTML文件、JS文件与AS文件。5、本规范建议使用统一的Code Style与Formatter风格,通过IDE进行配置。3读者范围1、软件过程改进领导小组与工作小组所有人员;2、所有运用Java技术的软件项目、产品的有关领导、项目负责人、设计人 员、开发人员与测试人员。3、所有涉及运用Java
26、技术的软件项目、产品的有关人员。面错误信息,如堆栈信息,并进行日志记录。【注:强制执行】代码风格1缩进1、使用空格代替Tab缩进,避免各类编辑器中看到不一样的代码格式。【注: 强制执行,Eclipse可辅助排版】2、代码按层级缩进,每层级缩进4个字符(关于特定格式文件,能够按照 实际进行调整,如XML文件可缩进2个字符),所有“广块内容都应该进行 缩进。【注:强制执行,Eclipse可辅助排版】参考例子: class - Examplell 131 int inyArray 1 = 1, - 2, 3, 4, 5, 6 );31 int - the Int = 1; SI String- so
27、meString = r,Hello,r;SI double - aDouble - = 3.0; 91 91 -void f oo (int a, int b, int - cz int d, int e, int f) 9I switch (a) (91 case 0:91 Other.doFoo();现 break; SI default: 91 Other. doBaz () ; 912括号1、除数组的初始化定义外,“”中的语句应单独作为一行。【注:强制执 行,Eclipse可辅助排版】2、左括号“”可根据开发习惯是否换行存放,假如换行存放,务必与其前 导语句首字符对齐,右括号“”务必
28、作为单独一行存放同时与匹配行对齐(即 左括号前导语句首字符)。【注:强制执行,Eclipse可辅助排版】3、在项目内部,相同类型的文件,其括号的风格务必统一。【注:强制执 行,Eclipse可辅助排版】参考例子:class Example (91 SomeClass- fField- = new- SoiueClass () SI - -SI int myArray = ( 1, 1 2, 3, -4, -5, 6 );SI intemptyArray=new int;出 31 Example () 9I void-bar (int - p) SI .牙for (int i = 0; , i
29、10; i+) 91(31 )3l switch (p) SI 31 case- 0: SI fField.set(0) ;3l break; SI3空格1、操作符两端务必带有空格符。【注:强制执行,Eclipse可辅助排版】参考例子:JCList list - = new,ArrayList () ;3Iint a = -4 +, -9; SIb = a+/ntunber; SIc - += - 4;3lboolean value = true - & False; 2、各并行元素(如函数参数)间以空格符隔开,空格符放在逗号后方。参考例子:【注:强制执行,Eclipse可辅助排版】, imp
30、lements 10, 1 Ilz - 12913、无特别要求,括号“、“”、”()”左右方尽量不要增加无必要性的空格符。【注:强制执行,Eclipse可辅助排版】参考例子:MyClass (int - x, int - y, int z) - throws - E0, E13I(31super (xz yz zz - true) ;31for(inti=0,j- array.length;i array.length;i+,j- (SIfor (String- s : names) 31%现 nrint arrayO = new int ; 31intarrayl= new int1,2,3
31、;现int array2 = new int 3 ; SI4空行1、同一个编译单元间(包定义、导入声明、类)应以空行相隔。 参考例子:【注:强制执行,Eclipse可辅助排版】packagefoo.bar.baz;91import java, util. List; 31inort,j ava.util.Vector;中SI-. Socket; SI苧public class Anotherll(SI )91 91 public - class ExampleSI 亨public static - class Pair 31(912、类定义内部各元素间(字段定义、方法)应以空行相隔。参考例子:
32、【注:强制执行,Eclipse可辅助排版】private - LinkedList f List; 91public - int counter; SI sipul)lic - Example (LinkedList - list) 31 Tf List = list; 31 counter - = 0; JI91public void push (Pair p) 31 (SIf List. add (p) ; 31 +counter; SI3I3、同一方法内实现不一致的功能之间应以空行相隔。【注:强制执行】 4、不能无理由出现大片空行。【注:强制执行】5操纵语句1、关于循环操纵等元素块,不管
33、是否带有body,都应该以包含。 参考例子:【注:强制执行】class Example! 卬 void bar () SI , (91 do 91 贝 while (true);亨 tryJI (31 13I catch* (Exception-e) 31 (SI 13l finally? SI % SI6行宽1、每行代码尽量操纵行宽在100字以内,当超出100字时候,代码应当进 行缩进。【注:非强制执行,属加分项】2、方法的缩进应当保证参数对齐。【注:非强制执行,属加分项】参考例子:class ExampleSl (31void foo(现 intargl, int arg2, SI int
34、arg3, int - arg4z intarg5,int-arg6)出 T 卬 )SI3、关于过长的SQL/HQL语句,则使用关键字对齐方式,具体可通过PL/SQL 等工具进行代码的格式化。【注:非强制执行,属加分项,附带sql规范一并 考核】参考例子:String hql -“from Project c n where c.enabled - 1 n and c.status - 4 n and exists (from ProjectManuscript a nwhere a.process inn(from ProjectProcess b99where b.project .id
35、c.id)99and a.status (select case when d.checkerl.userid :1 then ,2 1Mwhen d.checkers .userid = :2 then 3when d.checkers.userid = :3 then ,4 endMfrom Project d where d.xd = c.id)7类、函数1、每个函数的代码长度应尽量操纵在50行以内(不包含注释),假如函数 功能过于庞大,可把独立的功能段单独抽取出来作为子函数。【注:非强制执行, 属加分项】2、每个类的代码长度应尽量操纵在1000行以内(不包含注释),假如类功 能过于庞大
36、,可通过组合的方式来分解类。【注:非强制执行,属加分项】三注释1基本原则1、注释目的在于增加代码清晰度,使代码易于被其他开发人员懂得。【注: 强制执行】2、保持注释简洁,禁止为了注释而注释。【注:强制执行】3、注释除带有代码功能外,还应带有描述上下文意图,具体描述其原因。4、除变量定义等较短语句的注释可用行尾注释外,其他注释当避免使用行 尾注释。5、对描述较长的注释,应当使用HTML标记进行格式化,便于生成的 JavaDoc易阅读与懂得。【注:强制执行】2文件、包1、文件、包头部应当带有注释,描述其功能、作用、作者、创建时间、修 改历史等信息。【注:非强制执行,属加分项】参考例子:逋用DAO的
37、接口,包括IBaseDA口16211dg8&52办0,其中IBaseDAO适用于JUM1.4,而 IGener icBaseDAO适用于 JUM1.5当前包依赖com. gdcopway. corranon. exception. FrameuorKException以及com. gdcopuay. coiranon. tools. query.Queryconstants|3类、接口1、对类、接口的注释应当符合JavaDoc规范。【注:强制执行】2、类、接口定义务必标记功能、作用、作者、时间。【注:强制执行】3、当代码基线定义后,后续保护中新增的方法或者字段在类、接口声明头 部中应当添加修订
38、记录,注明时间、原因与作者。【注:非强制执行,属加分项】参考例子:I*公差的DA港口,所有业务逻辑类,际特别需要外,均可引用该接口实例从而荻得DA。服务* 建议在jvml. 4使用本接口,jvml. S或以上使用IGenericBaseDAO* 添加了两个执行原生SQL的两个方法(2008-7-2)* author chenjianxin, zsj* caichongguiz iinni 2007-8-6 修订p* jijmi 2011-4-21 修订 */ public interface IBaseDAO /方去持久化对象,此方法不支持主键为。的情况 * param oj待持久化的对象*
39、throws FrameworkException 如果持久化失败,抛出FrameworKExcepcion*/ public Serializable save(Object oj) throws FrameworkException;4方法1、对方法的注释应当符合JavaDoc规范。【注:强制执行】2、方法定义应带有功能、作用、执行条件(假如有)、参数,关于复杂功能 的方法,应当带有例子描述。【注:功能、作用、执行条件(假如有)、参数属强 制执行;例子描述属非强制执行,属加分项】3、每个方法中含有的参数与返回值应当描述其类型、作用、值的范围,对 方法的影响。【注:强制执行】4、当方法抛出自定义的受控特殊(Checked Exception,不含工具、框架抛 出的特殊)时,务必对特殊产生的原因进行描述,便于调用者捕捉。【注:强制 执行】参考例子: