Java编码规范第1章概述.......................................................................................................................................3第2章重要规范...............................................................................................................................4第3章类的编写规则.........................................................................................................................6第4章格式规范...............................................................................................................................7第5章命名规范.............................................................................................................................17第6章注释规范.............................................................................................................................23第7章编程实践.............................................................................................................................27第8章设计模式快速参考.............................................................................................................29第9章单元测试.............................................................................................................................44第10章互相check代码................................................................................................................44第11章代码重构...........................................................................................................................44第12章参考资料.........................................................................................................................46文档历史日期作者版本号备注2010-07-06chengjunV0.1前言本标准系公司首次发布实施,主要针对公司所有软件产品源代码范围的Java编码风格,对Java文件的文件组织、代码风格、注释、命名、声明、异常、习惯等方面均作出规范,以保障公司项目代码的易维护性和编码安全性。本标准由IT研发部门制定。本标准主要起草人:chengjun本标准主要审核人:jason,david,perter,evan,elpha,lee,shangwen本标准批准人:jason、david、peter本标准首次发布日期:术语Pascalcase-所有单词第一个字母大写,其它字母小写。例:Person,OrderDetail,OilTank。Camelcase-除了第一个单词,所有单词第一个字母大写,其他字母小写。例:oilLevel,customerName在后面的描述中我们使用Pascal代表第一种表示方式,Camel代表第二种表示方式。第1章概述1.1代码需要规范代码之于程序员,就像零件之于机械工,庄稼之于农民,它是软件的基石,一行行代码都是程序员的心血经过日日夜夜凝结成的。做为一个程序员,应该像母亲呵护孩子一样呵护自己的代码,它不仅仅是一行一行的文字,它是一个程序员的尊严和价值所在;它是活的,你甚至能感受到它的心跳。编码规范只是大家达成一致的约定,这样大家的代码就可以互相看懂,维护起来更加容易,思想更畅快的交流,经验更快的得到传播。代码规范不是束缚程序员的桎梏,应该知道,不遵守规范的个性的代码并不代表程序员的性格,并不能张扬个性。个性应该体现在用更简单、更优雅、更易读、更易理解以及算法实现效率更高等方面。可读性,可理解性是代码的重要方面,本规范主要围绕如何去产生规范易读的代码。另外,它也保证了大家有共同的先验知识。第2章重要规范一操作规范1.模板及格式化一号店的开发人员必须保证代码格式化的一致性,否则可能会导致代码冲突,轻微的耗费人力合并代码;严重时可能导致代码丢失,引起bug或者故障。.开发人员必须配置NewHeight的codetemplates.xml代码模板文件。.开发人员必须配置NewHeight的NewHeightFormatter.xml代码格式化文件。.每次提交代码之前,必须对java代码format。模板文件:Eclipse中配置的位置:Window-Preferences-Java-CodetemplatesWindow-Preferences-Java-Formatter2.代码提交.为防止冲突,任何时候,代码(及配置文件)提交前,先从SVN中更新代码和配置文件,以及早发现丌兼容的代码变更和冲突。.提交代码(及配置文件)时,如果发生冲突时,先看历史说明,再找相关人员确认,坚决不允许强制覆盖。.每次提交代码之前,必须检查是否有eclipsewarning,并FIX所有的warning。.开发过程定期使用FindBugs扫描代码,合并代码时不允许出现高等级问题。3.垃圾清理.对从来没有用到的或者被注释的方法,变量,类,配置文件,动态配置属性等要坚决从系统中清理出去,避免造成过多垃圾。二日志规范1.日志输出.生产代码禁止以System及Throwable.printStackTrace的方式输出日志信息,必须用Logger替代。.对trace/debug/info级别的日志输出,必须使用条件输出形式,否则大量的日志会增加来自对象toString的性能成本。.对于日志的打印,任何情冴下都不允许日志错误导致业务失败。2.错误日志.对于由于系统原因造成业务处理失败的事件,需要记录错误日志。非系统原因的业务处理失败,不应该记录错误日志(推荐使用warn级别),避免错误日志过大,影响紧急情况下的故障分析不诊断.三注释规范1.基本原则.对于一个完整的类,应该包括NewHeight的版权注释、类的说明注释、类成员变量注释,以及public、protected、private方法的注释(setter、getter、接口的实现方法除外)。.必须保证代码和注释的一致性。.正确区分使用文档注释和实现逻辑注释。四异常处理.捕捉到的异常,不允许不做任何处理就截断,至少要记入日志,或重新抛出。.最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。五安全规范1.WEB安全.对于前台的web页面,必须加上表单防重复提交功能;对于业务关键字段需要加上防篡改的功能,否则可能造成业务重复执行或者被客户端恶意修改。.对于前台的web页面,严禁出现方便调试的后门页面。.不允许出现页面向自身重定向、或者多个页面间相互重定向的情冴。如果控制不当,很容易造成系统宕机。2.敏感信息的保护用户的敏感信息包括密码、短信验证码、支付验证码、身份证号、银行卡号、银行密钥,商户密钥等信息;用户敏感信息不能泄露,否则可能会带来不安全因素。可能会导致敏感信息泄露的方式有:Logger、URL的get参数(因为URL的get参数会在apache日志中被输出)。六通用规范1.配置信息的使用避免将UserID、URL、文件名、系统开关参数、业务规则的可变参数等硬编码。2.资源的使用对系统资源的访问,使用后必须释放系统资源。这类资源包括:文件流、线程、网络连接、数据库连接等。对于文件、流的IO操作,必须通过finally关闭。对于线程,线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。对于网络连接与数据库连接,必须由框架通过连接池提供,不允许应用中自行建立网络与数据库连接。第3章类的编写规则1)所有包,类,接口,方法,属性,变量,参数均使用英文单词进行命名,具体细节请参见命名规范一章。2)命名包,类,接口,方法以及变量时,尽量使用贴近问题域的且意义丰富的名称。3)修改源代码时,应尽量保持与所修改系统的编码风格保持一致。4)所有包名使用必须使用com.[company]前缀,所有项目使用com.[company].projects.[projectname],company是公司简称,projectname是项目的缩写。注意尽量不要用生僻的缩写,尤其是中文缩写。附上例子:可以点击查看Example.java第4章格式规范1)包的导入应该按照相关性进行分组。importjava.io.IOException;importjava.net.URL;importjava.rmi.RmiServer;importjava.rmi.server.Server;importjavax.swing.JPanel;importjavax.swing.event.ActionEvent;importorg.linux.apache.server.SoapServer;2)只倒入明确需要的类,这样只要看导入列表,就可以知道该类依赖于哪些类和接口,保证可读性。importjava.util.List;//避免:importjava.util.*importjava.util.Arraylist;importjava.util.HashSet;3)类和接口中元素的布局顺序。1.类和接口的文档描述2.类和接口的声明3.类的静态变量,按照public,protected,package,private的顺序。4.实例变量,按照public,protected,package,private的顺序。5.类的方法,无固定顺序。4)类的声明,基类和实现的接口应该独立成行,保证可读性。classUserManagerImplextendsAbstractManagerimplementsIUserManager{…}5)方法修饰关键字定义顺序。public,protected,privatestaticabstractsynchronizedunuaualfinalnativemethodName注意访问标示符一定要在最前面。publicstaticdoublesquare(doublea);//避免:staticpublicdoublesquare(doublea);6)变量声明,采用Camel表示法不要在一行声明多个变量。//推