DKBA华为技术有限公司企业技术规范DKBAXXXX-2001.12代替(DKBA200106-003)Java语言编程规范2001-12-XX发布2001-12-XX实施华为技术有限公司发布密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X2目次前言..............................................................................................................................................................31范围112规范性引用文件113术语和定义114排版规范124.1规则121.*程序块要采用缩进风格编写,缩进的空格数为4个。122.*分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。123.*较长的语句、表达式或参数(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。134.*不允许把多个短语句写在一行中,即一行只写一条语句135.*if,for,do,while,case,switch,default等语句自占一行,且if,for,do,while等语句的执行语句无论多少都要加括号{}。136.*相对独立的程序块之间、变量说明之后必须加空行。137.*对齐只使用空格键,不使用TAB键。14密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X38.*在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。144.2建议151.类属性和类方法不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置。155注释规范165.1规则161.一般情况下,源程序有效注释量必须在30%以上。162.包的注释:包的注释写入一个名为package.html的HTML格式的说明文件放入当前路径。163.包的注释内容:简述本包的作用、详细描述本包的内容、产品模块名称和版本、公司版权。164.文件注释:文件注释写入文件头部,包名之前的位置。165.文件注释内容:版权说明、描述信息、生成日期、修改历史。176.类和接口的注释:该注释放在package关键字之后,class或者interface关键字之前。187.类和接口的注释内容:类的注释主要是一句话功能简述、功能详细描述,188.类属性、公有和保护方法注释:写在类属性、公有和保护方法上面。199.成员变量注释内容:成员变量的意义、目的、功能,可能被用到的地方。1910.公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、违例等。19密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X411.对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的异常,选择主要的在注释中说明。对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明。2012.*注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。2013.*注释与所描述内容进行同样的缩排。2014.*将注释与其上面的代码用空行隔开。2115.*对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。2116.*对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。2117.*边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。2118.*注释的内容要清楚、明了,含义准确,防止注释二义性。2119.*避免在注释中使用缩写,特别是不常用缩写。215.1建议211.*避免在一行代码或表达式的中间插入注释。222.*通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。223.*在代码的功能、意图层次上进行注释,提供有用、额外的信息。22密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X54.*在程序块的结束行右方加注释标记,以表明某程序块的结束。225.*注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。226.方法内的单行注释使用//。227.注释尽量使用中文注释和中文标点。方法和类描述的第一句话尽量使用简洁明了的话概括一下功能,然后加以句号。接下来的部分可以详细描述。238.顺序实现流程的说明使用1、2、3、4在每个实现步骤部分的代码前面进行注释。239.一些复杂的代码需要说明。236命名规范246.1规则241.包名采用域后缀倒置的加上自定义的包名,采用小写字母。在部门内部应该规划好包名的范围,防止产生冲突。部门内部产品使用部门的名称加上模块名称。产品线的产品使用产品的名称加上模块的名称。242.类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合法。243.方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。244.方法中,存取属性的方法采用setter和getter方法,动作方法采用动词和动宾结构。24密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X65.属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同。256.常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用finalstatic修饰。257.属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用this引用,引用静态成员变量时使用类名引用。256.2建议251.常用组件类的命名以组件名加上组件类型名结尾。252.如果函数名超过15个字母,可采用以去掉元音字母的方法或者以行业内约定俗成的缩写方式缩写函数名。263.准确地确定成员函数的存取控制符号,不是必须使用public属性的,请使用protected,不是必须使用protected,请使用private。264.含有集合意义的属性命名,尽量包含其复数的意义。267编码规范277.1规则271.*明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编写方法实现。272.应明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身负责,缺省是由方法调用者负责。273.明确类的功能,精确(而不是近似)地实现类的设计。一个类仅实现一组相近的功能。274.所有的数据类必须重载toString()方法,返回该类有意义的内容。27密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X75.数据库操作、IO操作等需要使用结束close()的对象必须在try-catch-finally的finally中close()。276.异常捕获后,如果不对该异常进行处理,则应该纪录日志或者ex.printStackTrace()。287.自己抛出的异常必须要填写详细的描述信息。288.运行期异常使用RuntimeException的子类来表示,不用在可能抛出异常的方法声明上加throws子句。非运行期异常是从Exception继承而来的,必须在方法声明上加throws子句。299.在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。2910.*注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。2911.*避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变量来代替。2912.数组声明的时候使用int[]index,而不要使用intindex[]。3013.调试代码的时候,不要使用System.out和System.err进行打印,应该使用一个包含统一开关的测试类进行统一打印。3014.用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。307.2建议30密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X81.记录异常不要保存exception.getMessage(),而要记录exception.toString()。302.一个方法不应抛出太多类型的异常。313.异常捕获尽量不要直接catch(Exceptionex),应该把异常细分处理。314.*如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。315.对于创建的主要的类,最好置入main()函数,包含用于测试那个类的代码。316.集合中的数据如果不使用了应该及时释放,尤其是可重复使用的集合。317.*源程序中关系较为紧密的代码应尽可能相邻。318.*不要使用难懂的技巧性很高的语句,除非很有必要时。318JTEST规范328.1规则(1-2级)321.在switch中每个case语句都应该包含break或者return。322.不要使用空的for、if、while语句。323.在运算中不要减小数据的精度。324.switch语句中的case关键字要和后面的常量保持一个空格,switch语句中不要定义case之外的无用标签。325.不要在if语句中使用等号=进行赋值操作。326.静态成员或者方法使用类名访问,不使用句柄访问。327.方法重载的时候,一定要注意方法名相同,避免类中使用两个非常相似的方法名。32密级:内部公开DKBAXXXX-2001.12VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X98.不要在ComponentListener.componentResized()方法中调用serResize()方法。329.不要覆盖父类的静态方法和私有方法。3210.不要覆盖父类的属性。3211.不要使用两级以上的内部类。3212.把内部类定义成私有类。3213.去掉接口中多余的定义(不使用public,abstract,static,final等,这是接口中默认的)。3214.不要定义不会被用到的局部变量、类私有属性、类私有方法和方法参数。3215.显式初始化所有的静态属性。3216.不要使用System.getenv()方法。3217.不要硬编码‘\n’和‘\r’作为换行符号。3218.不要直接使用java.awt.peer.*里面的接口。3219.使用System.arraycopy(),不使用循环来复制数组。3220.避免不必要的instanceof比较运算和类造型运算。3221.不要在finalize()方法中删除监听器(Listeners)。3222.在finalize()方法中一定要