当前位置:文档之家› 华为JAVA编码规范

华为JAVA编码规范

1.程序块采用缩进风格,空格为4个.说明:对于开发工具自动生成的代码可以不一致2.分界符(如大括号{和})应各自占一行并且在同一列,同时与引用它们的语句左对齐,在方法的开始,类和接口的定义,以及if,for,do,while,switch,case语句都要采用上述缩进说明:for(…){…说明:if(filename != null&& new File(logPath+filename).length() < ()){3.…作符)说明:采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格4.类属性和方法不要交叉放置,不同存取范围的属性和方法也不要交叉放置说明:类定义:{类公有属性定义;类保护属性定义;类私有属性定义;类公有方法定义;类保护方法定义;类私有方法定义;}5.源程序的有效注释量必须在30%以上6.包的注释写入一个名为的html格式的说明文件放入当前路径7.包的注释内容:本包作用,详细描述本包内容,产品模块名称及版本,公司版本说明:<html><body><p>一句话描述<p>详细描述<p>产品模块<br>公司版本信息</body></html>8.文件注释:写入文件头部,包名之前9.文件注释内容:版本说明,描述信息,修改历史,生成日期说明:/**文件名*版权*描述*修改人*修改时间*修改内容*跟踪单号*修改单号*/10.类和接口注释:放在package注释之后,class或interface之前11.类和接口注释内容:类的注释要一句话功能描述,功能详细描述说明:/***<一句话功能简述>*<功能详细描述>*@author*@version*@see [相关类/方法]*@since [产品/模块版本]*@deprecated (表示不建议使用该类或者接口)12.类属性,公有和保护方法注释:写在类属性,公有和保护方法上面13.成员变量注释内容:成员变量的意义,目的,功能,可能被用到的地方14.公有和保护方法注释的内容:方法的一句话功能描述,功能详细描述,输入参数,输出参数,返回值,违例说明:/***@param*@return*@exception /throws*/15.对于方法内部用throw抛出的异常,要在方法的注释中标明,对于调用其他方法抛出的异常,选主要的在注释中说明,对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明16.注释应与描述的代码相近,对代码的注释应放在代码上方或者右方(单行注释)相邻位置,不可放在下面,如放于上方则与上面代码用空行隔开17.注释与描述的内容进行同样的缩进18.对变量的定义和分支语句,必须加以注释19.对于switch下的case语句,如果处理完一个case要进入下一个case,必须在该case处理完,下一个case前加上明确的注释说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句20.边写代码边写注释,修改代码同时修改注释保证代码和注释一致,没用的注释要删除21.注释内容要清楚,明了,含义明确,防止二义性22.不要在注释中用缩写说明:除非必要,在使用缩写时或之前,应对缩写进行必要的说明23.不要在一行代码或表达式中间加注释说明:除非必要,不应在代码或表达式中间插入注释,否则容易使代码可理解性变差。

24.通过对函数,过程,变量,结构的正确命名,以及合理的组织代码,使代码成为自注释的25.在代码的功能,意图层次上进行注释,提供有用的,额外的信息示例.如下注释意义不大。

26.下来的部分可以详细描述说明:JavaDoc工具收集简介的时候使用选取第一句话。

27.顺序实现流程的说明使用1,2,3,4.在每个实现步骤的代码前进行注释示例:如下是对设置属性的流程注释。

断输入参数是否有效。

……置本地变量……28.一些复杂的代码要说明示例:这里主要是对闰年算法的说明。

果能被4整除,是闰年;果能被100整除,不是闰年;果能被400整除,是闰年;29.包名采用域后缀倒置加上自定义包名,用小写字母,在部门内部要规划好包名的范围,防止冲突,部门内部产品使用部门的名称加上模块名称,产品线的产品使用产品的名称加上模块名称格式: .产品名.模块名称.部门名称.项目名称30.示例:融合WEBSMAP包名通用消息转发包名类名和接口使用完整意义的英文描述,英文首字母大写,其他使用小写和大写的混合示例:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransation31.方法名使用完整意义的英文描述,首字母小写,剩余字母首字母大写,其他字母小写示例: private void calculateRate();public void addNewOrder();32.方法中存取属性的方法用setter方法和getter方法,动作方法采用动词和动宾结构格式: get+非布尔属性名()set+ 属性名()is+布尔属性名()动词()动词+宾语()示例:public String getType();public boolean isFinished();public void setVisible(boolean);public void addKeyListener(Listener);33.属性名使用完整意义的英文描述,第一个单词字母小写,剩余单词首字母大写,其余字母小写,属性名不能和方法名相同示例: private customerName;private orderNumber;private smpSession;34.常量名使用全大写英文,英文单词之间用下划线隔开,并使用finalstatic修饰示例:public final static int MAX_VALUE=1000;public final static String DEFAULT_START_DATE=“2008-11-06”;35.属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时用this,引用静态成员变量时用类名示例:public class Person{private String name;private static List properties;public void setName(String name){=name;}public void setProperties (List properties){Person. Properties= properties;}}36.常用组件的命名以组件名加上组件类型名结尾示例:Application类型的,命名以App结尾---MainApp;Frame类型的,建议命名以Frame结尾---TopoFrame;Panel类型的,建议命名以Panel结尾—CreateCircuitPanel;Bean类型的,建议命名以Bean结尾---DataAccessBean;EJB类型的,建议命名以EJB结尾--DBProxyEJB;Applet类型的,建议命名以Applet结尾---PictureShowApplet;37.函数名超过15个字母可采用去掉元音字母的方法或行业内约定俗成的缩写方式缩写函数名示例:getCustomerInformation()改为getCustomerInfo()38.准确的确定成员函数的存取控制符,不是必须使用public的请用protected,不是必须用protected的请用private示例:protected void setUserName()private void calculateRate()39.含有集合意义的属性命名,尽量包含复数的意义示例:customes;orderItems40.明确方法功能,精确实现方法设计,一个函数完成一个功能,简单的功能也要编写方法实现说明:虽然为仅用一两行就可以完成的功能去编写方法好像没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。

41.明确规定对接口方法参数的合法性检查应由方法的调用者负责还是有接口方法本身负责,缺省由方法调用者负责说明:对于模块间接口方法参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患,要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。

42.明确类的功能,精确实现类的设计,一个类仅实现一组相近功能说明:划分类的时候,应该尽量把逻辑处理、数据和显示分离。

实现类功能的单一性。

示例:数据类不能包含数组处理的逻辑通信类不能包含显示处理的逻辑43.所有的数据类必须重载toString()方法,返回该类有意义的内容说明:父类如果实现了比较合理的toString(),子类可以继承不必再重写。

示例: public TopoNode{private String nodeName;public String toString(){Return“NodeName:”+nodeName;}}44.数据库操作,IO操作要使用close()的对象要在try-catch-finally的finally中close()示例:try{45.往看不出出了什么错.46.一个方法不应抛出太多类型的异常47.异常捕获尽量不要直接catch(Exception ex),要把异常细分处理48.如果多段代码重复做同一件事情,那么在方法划分上可能存在问题49.对于创建的主要的类,最好置入main()方法,包含用于测试那个类的代码50.集合中的数据如果不使用应及时释放,尤其是可重复使用的集合51.源程序中关系紧密的代码应尽可能相邻52.不要使用难懂的技巧很高的语句,除非很有必要53.在switch中每个case后面要加上return或者break54.在运算中不要减少数据精度55.switch中的case要和后面的常量保持一个空格,switch语句中不要定义case之外的无用标签56.不要在if中使用等号=进行赋值57.静态成员或方法使用类名访问,不使用句柄访问58.方法重载时,方法名一定要相同,避免类中使用两个相似的方法名76.包的注释内容要求: 简述本包的作用详细描述本包的内容,产品模块名称和版本,公司版权77.不要在Componentlisttener,componentResied()方法中调用serResize()方法.78.不要覆盖父类的静态方法和私有方法79.不要覆盖父类的属性80.不要使用二级以上的内部类81.把内部类定义成私有类82.去掉接口中多余的定义(不使用public ,abstaract, static,final等这是接口默认的 )83.不要定义不会被用到得局部变量 ,类私有属性和私有方法和方法参数84.显示初始化所有的静态属性85.不要使用System,getenv()方法86.不要硬编码‘\n’‘\r’作为换行符87.不要直接使用里面的接口88.使用(), 不使用循环来复制数组89.避免不必要的instanceof 比较运算和类造型运算90.不要在finalize()方法中删除监听器(listeners)91.在finalize()方法中的finally中调用()方法92.在finalize()方法中调一定调用()方法93.进行字符转换的时候应该尽可能的较少临时变量94.使用ObjectStream的方法后,调用reset()释放对象95.线程同步中,在循环里面使用条件测试(使用while(isWait)wait()代替If(iswait)wait)96.不调用Thread类的resume(),suspend(),stop()方法97.减小单个方法的复杂度使用的if,while,for,switch语句要在10个以内98.在servelts中重用jdbc连接数据源99.减少在servle中使用的同步方法100.不定义在包中没有被用到的友好的属性,方法和类101.没有子类的友好类应该定义为final方法定义为final102.数据库操作,IO操作等需要使用结束close()的对象必须try-catch-catch-finally的finally中close().103.为switch语句提供一个default选项104.不要在for循环体中对计数器赋值105.不要给非公有类定义public构造器106.不要对浮点数进行比较运算如== != 减少< ,>运算107.实现equals() 方法时先用getClass()或者instanceof进行类型比较通过后才能继续比较108.不要重载main()方法用作除入口以外的其它用途109.方法的参数后不要和类中的方法名相同110.除了构建器外,不要使用和类名相同的方法名111.不要定义Error和RuntimeException的子类,可以定义Exception 的子类112.线程中需要实现run()方法113.使用equals()比较两个类的值是否相同114.字符串和数字运算结果连接的时候,应该是把数字运算部分用小括号括起来115.类中不要使用非私有(公有,保护,友好)的非静态属性116.在类中对于没有实现的接口应该定义成抽象方法,类应该定义成抽象类117.不要显示导入.*包118.初始化时不要使用类的非静态属性119.显示初始化时所有的局部变量,120.按照方法名把方法排序放置,同名和同类型的方法应该放在一起121.不要在抽象类的构造器中调用抽象方法122.重载equals()方法时应该重载hashcode()方法123.工具类不要定义构造器包括私有构造器124.不要在switch中使用10个以上的case语句125.把main()方法放在类的最后126.生命方法违例的时候不要使用Exception应该使用它的子类127.不要直接扔出一个error 应该扔出它的子类128.在进行比较的时候,总是把常量放在同一边129.在可能的情况下,总是为类定义一个缺省的构造器130.在捕捉异常的时候不使用Exception ,, RuntimException,,,, Throwable 最好用它子类131.在接口和工具类中定义常量,132.使用大写”L”表示long常量133.方法需要同样数量参数的注释用@param134.不要在注释中使用不支持的标示@unsupported135.不要使用Runtime,exec()方法136.不要使用自定义本地方法137.使用集合时初始化容量138.不要在循环体内调用同步方法和使用复杂的表达式139.不要在循环体内定义变量,140.使用StringBuffer时初始化容量141.少用!142.尽可能对接口进行instanceof运算143.不要显示调用finalize()144.不要使用静态集合其内存占用增长没有界限145.不要重复调用一个方法获取对象,使用局部变量重用对象146.线程中用notifyAll() 代替notify();147.避免在同步方法中调用另一个同步方法造成的死锁,148.非同步方法中不能调用wait() notify()方法149.不要使用同步方法,使用同步块150.用wait() notify() 代替while() sleep(),151.把所有的公有方法定义为同步方法152.实现Runable,run() 方法必须是同步方法153.在clone()方法中应该而且必须使用() 而不是new154.使用StringTokenizer代替indexof() 和substrin()155.不要对参数进行赋值156.不要使用String类的compareTo() equals()方法157.不要使用servler的SingletThreadModel 会消耗大量资源158.在Switch中每个Case语句都应该包含break或者return。

相关主题