华为JAVA编码规范_第1页
华为JAVA编码规范_第2页
华为JAVA编码规范_第3页
华为JAVA编码规范_第4页
华为JAVA编码规范_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

z.z.1.程序块采用缩进风格,空格为4个.说明:对于开发工具自动生成的代码可以不一致分界符(如大括号{和})应各自占一行并且在同一列,同时与引用它们的语句左对齐,在方法的开场,类和接口的定义,以及if,for,do,while,switch,case语句都要采用上述缩进说明:for(…){…//yourcode}较长(>80字符)的语句,表达式和参数要分多行,长表达式要在低优先级操作符划分新行,操作符放在行首,新行要适当缩进,整齐,语句可读.说明:if(filename!=null&&newFile(logPath+filename).length()<logConfig.getFileSize()){…//yourcode}一行只写一条语句说明:LogFilenamewow=null;LogFilenamethat=null;if,for,do,switch,while,case,default各占一行,它们的执行语句无论多少都要加{}说明:if(writeToFile){writeFileTerrupt();}相对独立的程序块,变量,说明要加空行说明:if(log.getLevel()<log.getRecord()){return;}//空行LogWritewriter;对齐只用空格键,不用TAB键说明:以免使用不同的编辑器阅读程序时,因TAB键所设置的空格数不同而造成程序布局不整齐,uildr,UltraEdit等编辑环境,支持行首TAB替换成空格,应将该选项翻开两个以上的关键字,变量,常量进展对等操作时,操作符之前,之后或前后要加空格,进展非对等操作时,如果是关系密切的立即操作符,后面不加空格(如.操作符)说明:采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,则应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格类属性和方法不要穿插放置,不同存取围的属性和方法也不要穿插放置说明:类定义:{类公有属性定义;类保护属性定义;类私有属性定义;类公有方法定义;类保护方法定义;类私有方法定义;}源程序的有效注释量必须在30%以上包的注释写入一个名为package.html的html格式的说明文件放入当前路径包的注释容:本包作用,详细描述本包容,产品模块名称及版本,公司版本说明:<html><body><p>一句话描述<p>详细描述邛>产品模块<br>公司版本信息</body></html>文件注释:写入文件头部,包名之前文件注释容:版本说明,描述信息,修改历史,生成日期说明:/**文件名**描述*修改人*修改时间*修改容*跟踪单号*修改单号*/类和接口注释:放在package注释之后,class或interface之前16.类和接口注释容:类的注释要一句话功能描述,功能详细描述说明:/***<一句话功能简述>*<功能详细描述>*author*version*see[相关类/方法]*since[产品/模块版本]*deprecated(表示不建议使用该类或者接口)17.类属性,公有和保护方法注释:写在类属性,公有和保护方法上面18.成员变量注释容:成员变量的意义,目的,功能,可能被用到的地方19.公有和保护方法注释的容:方法的一句话功能描述,功能详细描述,输入参数,输出参数,返回值,违例说明:/***param*return*e*ception/throws*/20.对于方法部用小皿川抛出的异常,要在方法的注释中标明,对于调用其他方法抛出的异常,选主要的在注释中说明,对于非RuntimeE*ception/pthrows子句声明会抛出的异常,必须在方法的注释中标明.注释应与描述的代码相近,对代码的注释应放在代码上方或者右方(单行注释)相邻位置,不可放在下面,如放于上方则与上面代码用空行隔开.注释与描述的容进展同样的缩进.对变量的定义和分支语句,必须加以注释.对于switch下的case语句,如果处理完一个case要进入下一个case,必须在该case处理完,下一个case前加上明确的注释说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句.边写代码边写注释,修改代码同时修改注释保证代码和注释一致,没用的注释要删除.注释容要清楚,明了,含义明确,防止二义性.不要在注释中用缩写说明:除非必要,在使用缩写时或之前,应对缩写进展必要的说明.不要在一行代码或表达式中间加注释说明:除非必要,不应在代码或表达式中间插入注释,否则容易使代码可理解性变差。.通过对函数,过程,变量,构造的正确命名,以及合理的组织代码,使代码成为自注释的.在代码的功能,意图层次上进展注释,提供有用的,额外的信息例如.如下注释意义不大。//如果receiveFlag为真。If〔receiveFlag〕而如下的注释则给出了额外有用的信息。//如果从连结收到信息If〔receiveFlag〕.在代码完毕行的右方加注释,以说明程序块的完毕说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。例如:参见如下例子。If〔……〕{programcode1while〔inde*<MA*_INDE*〕{programcode2}//endofwhile〔inde*<MA*_INDE*〕//指明该条while语句完毕。}//endofIf〔……〕//指明是哪条if语句完毕。.注释考虑程序的易读和外观的排版,使用的语句假设是中,英文都有,建议多使用中文,除非能用非常流利,准确的英文.方法的单行注释用//说明:调试程序的时候可以方便的使用/*……*/注释掉一长段程序。.注释用中文注释和中文标点,方法和类的描述第一句话使用简洁明了的话概括功能,然后加句号.接下来的局部可以详细描述说明:JavaDoc工具收集简介的时候使用选取第一句话。.顺序实现流程的说明使用1,2,3,4.在每个实现步骤的代码前进展注释例如:如下是对设置属性的流程注释。//1.判断输入参数是否有效。//2.设置本地变量.一些复杂的代码要说明例如:这里主要是对闰年算法的说明。//1.如果能被4整除,是闰年;//2.如果能被100整除,不是闰年;//3.如果能被400整除,是闰年;.包名采用域后缀倒置加上自定义包名,用小写字母,在部门部要规划好包名的围,防止冲突,部门部产品使用部门的名称加上模块名称,产品线的产品使用产品的名称加上模块名称格式:.huawei.产品名模块名称.huawei.部门名称.工程名称.类名和接口使用完整意义的英文描述,英文首字母大写,其他使用小写和大写的混合例如:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransation.方法名使用完整意义的英文描述,首字母小写,剩余字母首字母大写,其他字母小写例如:privatevoidcalculateRate〔〕;publicvoidaddNewOrder〔〕;.方法中存取属性的方法用setter方法和getter方法,动作方法采用动词和动宾构造格式:get+非布尔属性名〔〕set+属性名〔〕is+布尔属性名〔〕动词〔〕动词+宾语〔〕例如:publicStringgetType〔〕;publicbooleanisFinished〔〕;publicvoidsetVisible〔boolean〕;publicvoidaddKeyListener〔Listener〕;.属性名使用完整意义的英文描述,第一个单词字母小写,剩余单词首字母大写,其余字母小写,属性名不能和方法名一样例如:privatecustomerName;privateorderNumber;privatesmpSession;.常量名使用全大写英文,英文单词之间用下划线隔开,并使用finalstatic修饰例如:publicfinalstaticintMA*_VALUE=1000;publicfinalstaticStringDEFAULT_START_DATE="2008-11-06”;.属性名可以和公有方法参数一样,不能和局部变量一样,引用非静态成员变量时用this/l用静态成员变量时用类名例如:publicclassPersonprivateStringname;privatestaticListproperties;publicvoidsetName(Stringname)=name;publicvoidsetProperties(Listproperties)Person.Properties=properties;}.常用组件的命名以组件名加上组件类型名结尾例如:Application类型的,命名以App结尾---MainApp;Frame类型的,建议命名以Frame结尾---TopoFrame;Panel类型的,建议命名以Panel结尾一CreateCircuitPanel;Bean类型的,建议命名以Bean结尾---DataAccessBean;E类型的,建议命名以E结尾--DBPro*yE;Applet类型的,建议命名以Applet结尾---PictureShowApplet;.函数名超过15个字母可采用去掉元音字母的方法或行业约定俗成的缩写方式缩写函数名例如:getCustomerInformation〔〕改为getCustomerInfo〔〕.准确确实定成员函数的存取控制符,不是必须使用public的请用protected,不是必须用protected的请用private例如:protectedvoidsetUserName〔〕privatevoidcalculateRate〔〕.含有集合意义的属性命名,尽量包含复数的意义例如:customes;orderItems.明确方法功能,准确实现方法设计,一个函数完成一个功能,简单的功能也要编写方法实现说明:虽然为仅用一两行就可以完成的功能去编写方法好似没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。.明确规定对接口方法参数的合法性检查应由方法的调用者负责还是有接口方法本身负责,缺省由方法调用者负责说明:对于模块间接口方法参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患,要么就是调用者和被调用者均对参数进展合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。.明确类的功能,准确实现类的设计,一个类仅实现一组相近功能说明:划分类的时候,应该尽量把逻辑处理、数据和显示别离。实现类功能的单一性。例如:数据类不能包含数组处理的逻辑通信类不能包含显示处理的逻辑.所有的数据类必须重载toStringO方法,返回该类有意义的容说明:父类如果实现了比较合理的toString〔〕,子类可以继承不必再重写。例如:publicTopoNode{privateStringnodeName;publicStringtoString〔〕{Return"NodeName:"+nodeName;}}.数据库操作,1。操作要使用d0$©0的对象要在try-catch-finally的finally中close。例如:try{//……}Catch(IOE*ceptionioe){//……}finally{try{out.close〔〕;}catch〔IOE*ceptionioe〕{//……}}.异常捕获后如果不对异常进展处理,则应记录日志或e*.printStackTrace().自己写的异常要写详细的描述信息.运行期异常使用RuntimeE*ception的子类来表示,不用在可能抛出异常的方法声明上加上throws子句,非运行期异常是从E*cetion继承而来,必须在方法声明上加throws子句.在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序构造来确定,并且异常和错误码不应该混合使用,推荐使用异常.注意运算符的优先级,用括号明确表达式的操作顺序,防止使用默认优先级.防止使用不易理解的数字,用有意义的标识来代替,涉及物理状态或者含有物理意义的常量,不应直接使用数字,用有意义的静态变量来代替.数组声明使用in3inde*,不用intinde*[].代码调试时不用system.out和system.err进展打印,应使用一个包含统一开关的测试类进展统一打印.用调试开关来切换软件的DEBUG版本和正式版,而不要同时存在正式版和DEBUG版的不同源文件,减少维护难度.记录异常不要保存e*ception.getmessage(),而要记录e*ception.toString()NullPointE*ception抛出时常常描述为空.往往看不出出了什么错..一个方法不应抛出太多类型的异常.异常捕获尽量不要直接catch(E*ception©*),要把异常细分处理.如果多段代码重复做同一件事情,则在方法划分上可能存在问题.对于创立的主要的类,最好置入main。方法,包含用于测试那个类的代码.集合中的数据如果不使用应及时释放,尤其是可重复使用的集合.源程序中关系严密的代码应尽可能相邻.不要使用难懂的技巧很高的语句,除非很有必要.在switch中每个case后面要加上return或者break.在运算中不要减少数据精度.switch中的case要和后面的常量保持一个空格,switch语句中不要定义case之外的无用标签.不要在1£中使用等号二进展赋值.静态成员或方法使用类名访问,不使用句柄访问.方法重载时,方法名一定要一样,防止类中使用两个相似的方法名.包的注释容要求:简述本包的作用详细描述本包的容,产品模块名称和版本,公司.不要在ponentlisttener,ponentResied()方法中调用serResize。方法..不要覆盖父类的静态方法和私有方法.不要覆盖父类的属性.不要使用二级以上的部类.把部类定义成私有类.去掉接口中多余的定义(不使用public,abstaract,static,final等这是接口默认的).不要定义不会被用到得局部变量,类私有属性和私有方法和方法参数.显示初始化所有的静态属性.不要使用System,getenv()方法.不要硬编码‘\n’‘\r’作为换行符.不要直接使用java.awt.peer.*里面的接口.使用system.arrrycopyO,不使用循环来复制数组.防止不必要的instanceof比较运算和类造型运算.不要在finalize。方法中删除监听器(listeners).在finalize。方法中的finally中调用super.finalize()方法.在finalize。方法中调一定调用super.finalize。方法.进展字符转换的时候应该尽可能的较少临时变量.使用ObjectStream的方法后,调用reset。释放对象.线程同步中,在循环里面使用条件测试(使用while(isWait)wait()代替If(iswait)wait).不调用Thread类的resumeO,suspendO,stopO方法.减小单个方法的复杂度使用的if,while,for,switch语句要在10个以.在servelts中重用jdbc连接数据源.减少在servle中使用的同步方法.不定义在包中没有被用到的友好的属性,方法和类.没有子类的友好类应该定义为final方法定义为final.数据库操作J。操作等需要使用完毕△^©。的对象必须try-catch-catch-finally的finally中close。..为switch语句提供一个default选项.不要在for循环体中对计数器赋值.不要给非公有类定义public构造器.不要对浮点数进展比较运算如==!=减少<,>运算.实现equals。方法时先用getClass。或者instanceof进展类型比较通过后才能继续比较.不要重载main。方法用作除入口以外的其它用途.方法的参数后不要和类中的方法名一样.除了构建器外,不要使用和类名一样的方法名.不要定义Error和RuntimeE*ception的子类,可以定义E*ception的子类.线程中需要实现run()方法.使用equals。比较两个类的值是否一样.字符串和数字运算结果连接的时候,应该是把数字运算局部用小括号括起来.类中不要使用非私有(公有,保护,友好)的非静态属性.在类中对于没有实现的接口应该定义成抽象方法,类应该定义成抽象类.不要显示导入java.lang.*包.初始化时不要使用类的非静态属性.显示初始化时所有的局部变量,.按照方法名把方法排序放置,同名和同类型的方法应该放在一起.不要在抽象类的构造器中调用抽象方法.重载equals。方法时应该重载hashcode。方法.工具类不要定义构造器包括私有构造器.不要在switch中使用10个以上的case语句.把main。方法放在类的最后.生命方法违例的时候不要使用E*ception应该使用它的子类.不要直接扔出一个error应该扔出它的子类.在进展比较的时候,总是把常量放在同一边.在可能的情况下,总是为类定义一个缺省的构造器.在捕捉异常的时候不使用E*ception,,RuntimE*ception,,,,Throwable最好用它子类.在接口和工具类中定义常量,.使用大写〃L〃表示long常量.方法需要同样数量参数的注释用param.不要在注释中使用不支持的标示unsupported.不要使用Runtime,e*ecO方法.不要使用自定义本地方法.使用集合时初始化容量.不要在循环体调用同步方法和使用复杂的表达式.不要在循环体定义变量,.使用StringBuffer时初始化容量.少用!.尽可能对接口进展instanceof运算.不要显示调用finalize。.不要使用静态集合其存占用增长没有界限.不要重复调用一个方法获取对象,使用局部变量重用对象.线程中用notifyAll()代替notify。;.防止在同步方法中调用另一个同步方法造成的死锁,.非同步方法中不能调用wait。notify。方法.不要使用同步方法,使用同步块.用wait。notify。代替while。sleep。,.把所有的公有方法定义为同步方法.实现Runable,run()方法必须是同步方法.在clone。方法中应该而且必须使用super.cloneQ而不是new.使用StringTokenizer代替inde*of()和substring.不要对参数进展赋值.不要使用String类的pareTo()equals。方法.不要使用servler的SingletThreadModel会消耗大量资源.在Switch中每个Case语句都应该包含break或者return。.不要使用空的for,if,,while语句。.在运算中不要减小数据的精度。.Switch语句中的Case关键字要和后面的常量保持一个空格,Switch语句中不要定义Case之外的无用标签。.不要在1£语句中使用等号=进展赋值操作。.静态成员或者方法使用类名访问,不使用句柄访问。.方法重载的时候,一定要注意方法名一样,防止类中使用两个非常相似的方法名。.不要在ponentListener,ponentResizedO方法中调用serResize()方法。.不要覆盖父类的静态方法和私有方法。.不要覆盖父类的属性。.不要使用两级以上的部类。.把部类定义成私有类。.去掉接口中多余的定义〔不使用public,abstrac,static,final等,这是接口中默认的〕。.不要定义不会被用到的局部变量,类私有属性,类私有方法和方法参数。.显式寝化所有的静态属性。.不要使用Systemgetenr。方法。.不要硬编码’\n’和‘\r’作为换行符号。.不要直接使用java.awt.peer.*里面的接口。.使用System.arraycopy。,不要使用循环来复制数组。.防止不必要的instenceof比较运算和类造型运算。.不要在finalize。方法中删除临听器(listeners)。.在finalize。方法中一■定要调用superfinalize。方法。.在finalize。方法中的finally中调用superfinalize。方法。.进展字符转换的时候应该尽可能的较少用临时变量。.使用Objectstream的方法后,调用reset。释放对象。.线程同步中,在循环里面使用条件测试〔使用while(isWait)Wait()代替if(isWait)Wait。〕。.不使用Thread类的resumeO,suspend(),stopO方法。.减小单个方法的复杂性度,使用的if,while,for,switch语句要在10个以。.在Servlet中,重用JDBC连接的数据源。.减少在Servlets中使用的同步方法。.不定义在包中没有被用到的友好属性,方法和类。.没有子类的友好类应该定义成final。.没有被覆盖的友好方法应该定义成final。.为Switch语句提供一个default选项。.不要在for循环体中对计数器的赋值。.不要给非公有类定义public构建器。.不要对浮点数进展比较运算,尤其是不要进展==,!=运算,减少><运算。.实现equals。方法时,先用getclass。或者instanceof进展类型比较,通过后才能继续比较。.不要重载main)方法用作除放口以外的其他用途。.方法的参数名不要和类中方法名一样。.除了构建器外,不要使用和类名一样的方法名。.不要定义Error和RuntimeE*ception的子类,可以定义E*ception了子类。.线程中需要实现run()实现。.使用equals。比较两个类的值是否一样。.字符串和数字运算结果相连接的时候应该把数字运算局部用小括号括起来。.类中不要使用非私有〔公月,保护和友好〕的非静态属性。.在类中对于没有实现的接口,应该定义成抽象方法,类应该定义成抽象类〔5级〕.不要显示导入Java.lang.*包。.初始化时,不要使用类的非静态属性。.显示初始化所有的局部变量。.按照方法名把方法排序放置,同名合同类型的方法应该放在一起。.不要使用嵌套赋值,即在一个表达式中使用多个=。.不要在抽象类的构建器中调用抽象方法。.重载equals。方法的同时,也应该重载hushcode()方法。.工具类⑴而切不要定义构建器。包括私有构建器。.不要在switch中使用10个以上的case语句。.把main。方法放在类的最后。.声明方法违例的时候不要使用E*ception,应该使用它的子类。.不要直接仍出Error,应该扔出它的子类。.在进展比较的时候,总是把常量放在同一边〔都放在左边或者都放在右边〕。.在可能的情况下,总是为类定义一个缺省的构造器。.在捕获违例的时候,不使用E*ception,runtimeE*ception,Throwable尽可能使用它们的子类。.在接口或者工具类中定义常量〔5级〕。.使用大写"L’‘表示1。呼常量〔5级〕。.main。方法必需是publicstaticvoidmain(String[])。.对返回类型为boolean的方法使用is开头,其它类型的不能使用。.对非boolean类型取值方法9©成钉使用get开头,其它类型的不能使用。.对于设置值的方法"©成已使用set开头,其它类型不能使用。.方法需要有同样数量参数的注释paramo.不要在注释中使用不支持的标记,如:unsupported..不要使用Runtime,e*ec()方法。.不要自定义本地方法(nativemethod)。.使用尽量简洁的运算符号。.使用集合时设置初始容量。.单个首字符的比较使用0^^2不要使用startsWith()o.对于被除数或者被乘数为2的N次方的乘除运算使用移位运算符>>,<<。.一个字符的连接使用’‘而不使用"〃,如:Stringa=b+'c'。.不要在循环体调用同步方法和使用try-catch块。.不要使用不必要的布尔值比较,如:if(aequals(b)),而不是if(aequals(b)==true)。.常量字符串使用5亩巾,非常量字符串使用StringBuffero.在循环条件判断的时候不要使用复杂的表达式。.对于"if(condition)do1;elsedo2;”语句使用条件操作符"if(condition)"do1:do2”。.不要在循环体定义变量。.使用StringBuffer的时候设置初始容量。.尽可能的使用局部变量进展运算。.尽可能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论