华为JAVA编码规范

上传人:奔*** 文档编号:46348190 上传时间:2021-12-12 格式:DOCX 页数:13 大小:31.12KB
返回 下载 相关 举报
华为JAVA编码规范_第1页
第1页 / 共13页
华为JAVA编码规范_第2页
第2页 / 共13页
华为JAVA编码规范_第3页
第3页 / 共13页
点击查看更多>>
资源描述
密级:内部公开DKBAX-2001.121 .,4 .说明:对于开发工具自动生成的代码可以不一致2 .分界符(如大括号和)应各自占一行并且在同一列,同时与引用它们的语句左 对齐,在方法的开始,类和接口的定义,以及if,for,do,while,switch,case语句都要 采用上述缩进说明:for()/your code3 .较长(80字符)的语句,表达式和参数要分多行,长表达式要在低优先级操作符 划分新行,操作符放在行首,新行要适当缩进,整齐,语句可读.说明:if(filename != null& new File(logPath+filename).length() logConfig.getFileSize()/your code 4 . 一行只写一条语句说明:LogFilename wow = null;LogFilename that = null;5 . if,for,do,switch,while,case,default各占一行,它们的执行语句无论多少都要加 说明:if(writeToFile)writeFileThread.interrupt();6 .相对独立的程序块,变量,说明要加空行说明:if(log.getLevel() log.getRecord()return ;/空行LogWrite writer;7 .对齐只用空格键,不用TAB键说明:以免使用不同的编辑器阅读程序时,因TAB键所设置的空格数不同而造 成程序布局不整齐,JBuildr,UltraEdit等编辑环境,支持行首TAB替换成空格, 应将该选项打开8 .两个以上的关键字,变量,常量进行对等操作时,操作符之前,之后或前后要加空 格,进行非对等操作时,如果是关系密切的立即操作符,后面不加空格(如.操作 符)说明:采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格 ,如果语句已足 够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号问 不必加空格,因为java中括号已经是很清晰的标志了 .在长句中,如果需要加的 空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时 不要连续留两个以上空格9 .类属性和方法不要交叉放置,不同存取范围的属性和方法也不要交叉放置 说明:类定义:类公有属性定义;类保护属性定义;类私有属性定义;类公有方法定义;类保护方法定义; 类私有方法定义;10 .源程序的有效注释量必须在 30%以上11 .包的注释写入一个名为package.html的html格式的说明文件放入当前路径12 .包的注释内容:本包作用,详细描述本色内容,产品模块名称及版本,公司版本 说明:一句话描述详细描述产品模块公司版本信息13 .文件注释:,包名之前14 .文件注释内容:版本说明,描述信息,修改历史,生成日期 说明:/* 文件名* 版权* 描述* 修改人* 修改时间* 修改内容* 跟踪单号* 修改单号* /15 .类和接口注释:放在package注释之后,class或inteface之前16 .类和接口注释内容:类的注释要一句话功能描述,功能详细描述 说明:/* 一句话功能简述* 功能详细描述*author*version* see 相关类/方法* since 产品/模块版本* deprecated俄示不建议使用该类或者接口 )17 .类属性,公有和保护方法注释:写在类属性,公有和保护方法上面18 .成员变量注释内容:成员变量的意义,目的,功能,可能被用到的地方19 .公有和保护方法注释的内容:方法的一句话功能描述,功能详细描述,输入参数, 输出参数,返回值,违例说明:/*param*return*exception /throws*/20 .对于方法内部用throw抛出的异常,要在方法的注释中标明,对于调用其他方法 抛出的异常,选主要的在注释中说明,对于非RuntimeException,即throws子句 声明会抛出的异常,必须在方法的注释中标明21 .注释应与描述的代码相近,对代码的注释应放在代码上方或者右方(单行注释) 相邻位置,不可放在下面,如放于上方则与上面代码用空行隔开22 .注释与描述的内容进行同样的缩进23 .对变量的定义和分支语句,必须加以注释24 .对于switch下的case语句,如果处理完一个case要进入下一个case必须在该 case处理完,下一个case前加上明确的注释说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句25 .边写代码边写注释,修改代码同时修改注释保证代码和注释一致,没用的注释 要删除26 .注释内容要清楚,明了,含义明确,防止二义性27 .不要在注释中用缩写说明:除非必要,在使用缩写时或之前,应对缩写进行必要的说明28 .不要在一行代码或表达式中间加注释说明:除非必要,不应在代码或表达式中间插入注释,否则容易使代码可理解性变差。29 .通过对函数,过程,变量,结构的正确命名,以及合理的组织代码,使代码成为自 注释的30 .在代码的功能,意图层次上进行注释,提供有用的,额外的信息示例.如下注释意义不大。如果 receiveFlag 为真。If (receiveFlag)而如下的注释则给出了额外有用的信息。/如果从连结收到信息If (receiveFlag)31 .在代码结束行的右方加注释,以表明程序块的结束说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。示例:参见如下例子。If ()program code1while (index MAX_INDEX ) program code2 /end of while (index MAX_INDEX ) / /指明该条 while 语句 结束。 / /end of If ()/ /指明是哪条if语句结束。32 .注释考虑程序的易读和外观的排版,使用的语句若是中,英文都有,建议多使用 中文,除非能用非常流利,准确的英文33 .方法内的单行注释用说明:调试程序的时彳8可以方便的使用/*/注释掉一长段程序。34 .注释用中文注释和中文标点,方法和类的描述第一句话使用简洁明了的话概 括功能,然后加句号.接下来的部分可以详细描述说明:JavaDoc工具收集简介的时候使用选取第一句话。35 .顺序实现流程的说明使用1,2,3,4.在每个实现步骤的代码前进行注释 示例:如下是对设置属性的流程注释。/1.判断输入参数是否有效。/2.设置本地变量36 . 一些复杂的代码要说明示例:这里主要是对闰年算法的说明。/1.如果能被4整除,是闰年;/2.如果能被100整除,不是闰年;/3.如果能被400整除,是闰年;37 .包名采用域后缀倒置加上自定义包名,用小写字母,在部门内部要规划好包名 的范围,防止冲突,部门内部产品使用部门的名称加上模块名称,产品线的产品 使用产品的名称加上模块名称格式:com.huawei.产品名.模块名称com.huawei部门名称.项目名称示例: 融合 WEBSMAP 包名 com.huawei.iin.websmap通用消息转发包名com.huawei.insa2.msgtrans38 .类名和接口使用完整意义的英文描述,英文首字母大写,其他使用小写和大写 的混合示例:OrderInformation , CustomerList , LogManager , LogConfig , SmpTransation39 .方法名使用完整意义的英文描述,首字母小写,剩余字母首字母大写,其他字母 小写示例: private void calculateRate (); public void addNewOrder ();40 .方法中存取属性的方法用setter方法和getter方法,动作方法采用动词和动宾 结构格式:get+非布尔属性名()set+属性名() is+布尔属性名() 动词() 动词+宾语()示例:public String getType ();public boolean isFinished ();public void setVisible (boolean); public void addKeyListener (Listener);41 .属性名使用完整意义的英文描述,第一个单词字母小写,剩余单词首字母大写 其余字母小写,属性名不能和方法名相同示例: private customerNameprivate orderNumber;private smpSession42 .常量名使用全大写英文,英文单词之间用下划线隔开,并使用final static修饰 示例:public final static int MAX_V ALUE=1000 ;public final static String DEFAULT_START_DATE= 2008-11-06;43 .属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量 时用this,引用静态成员变量时用类名示例:public class Person private String name;private static List properties;public void setName(String name) this.name=name public void setProperties (List properties) Person. Properties= propertie s 44 .常用组件的命名以组件名加上组件类型名结尾示例:Application类型的,命名以 App结尾-MainApp ;Frame类型的,建议命名以 Frame结尾-TopoFrame;Panel类型的,建议命名以 Panel结尾一CreateCircuitPanel;Bean类型的,建议命名以 Bean结尾-DataAccessBean EJB类型的,建议命名以 EJB结尾-DBProxyEJB;Applet 类型的,建议命名以 Applet 结尾-PictureShowApplet;45 .函数名超过15个字母可采用去掉元音字母的方法或行业内约定俗成的缩写 方式缩写函数名示例:getCustomerInformation () 改为 getCustomerInfo ()46 .准确的确定成员函数的存取控制符,不是必须使用public的请用protected不是 必须用 protected的请用 private示例:protected void setUserName()private void calculateRate ()47 .含有集合意义的属性命名,尽量包含复数的意义示例:customer orderItems48 .明确方法功能,精确实现方法设计,一个函数完成一个功能,简单的功能也要编 写方法实现说明:虽然为仅用一两行就可以完成的功能去编写方法好像没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。49 .明确规定对接口方法参数的合法性检查应由方法的调用者负责还是有接口方法本身负责缺省由方法调用者负责说明:对于模块间接口方法参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患,要么就是调用者和被调用者均对 参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效 率。50 .明确类的功能,精确实现类的设计,一个类仅实现一组相近功能说明:划分类的时候,应该尽量把逻辑处理、数据和显示分离。实现类功 能的单一性。示例:数据类不能包含数组处理的逻辑通信类不能包含显示处理的逻辑51 .所有的数据类必须重载toString()方法,返回该类有意义的内容说明:父类如果实现了比较合理的toString(),子类可以继承不必再重写示例: public TopoNodeprivate String nodeNamqpublic String toString () Return “ NodeName +nodeName; 52 .数据库操作,IO操作要使用 close()的对象要在try-catch-finally的finally中 close()示例:try/Catch(IOException ioe)/finallytry out.close (); catch (IOException ioe) /53 .异常捕获后如果不对异常进行处理,则应记录日志或ex.printStackTrace()54 .自己写的异常要写详细的描述信息55 .运行期异常使用RuntimeException的子类来表示,不用在可能抛出异常的方法 声明上加上throws子句,非运行期异常是从Excetion继承而来,必须在方法声 明上加throws子句56 .在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常57 .注意运算符的优先级,用括号明确表达式的操作顺序,避免使用默认优先级58 .避免使用不易理解的数字,用有意义的标识来代替,涉及物理状态或者含有物 理意义的常量,不应直接使用数字,用有意义的静态变量来代替59 .数组声明使用int index,不用int index60 .代码调试时不用system.out和system.err进行打印,应使用一个包含统一开关 的测试类进行统一打印61 .用调试开关来切换软件的DEBUG版本和正式版,而不要同时存在正式版和DEBUG版的不同源文件,减少维护难度62 . t己录 异常不 要保存 exception.getmessage()W 要记录 exception.toString() NullPointException抛出时常常描述为空.往往看不出出了什么错.63 .64 .异常捕获尽量不要直接catch(Exception ex)要把异常细分处理65 .如果多段代码重复做同一件事情,那么在方法划分上可能存在问题66 .对于创建的主要的类,最好置入main()方法,包含用于测试那个类的代码67 .集合中的数据如果不使用应及时释放,尤其是可重复使用的集合68 .源程序中关系紧密的代码应尽可能相邻69 .不要使用难懂的技巧很高的语句,除非很有必要70 .在switch中每个case后面要加上return或者break71 .在运算中不要减少数据精度72 . switch中的case!?和后面的常量保持一个空格,switch语句中不要定义cas0 外的无用标签73 .不要在if中使用等号=进行赋值74 .静态成员或方法使用类名访问,不使用句柄访问75 .方法重载时,方法名一定要相同,避免类中使用两个相似的方法名76 .包的注释内容要求:简述本色的作用 详细描述本色的内容,产品模块名称和 版本,公司版权77 .不要在 Componentlisttener,componentResied()T法中调用 serResize(y!r法.78 .不要覆盖父类的静态方法和私有方法79 .不要覆盖父类的属性80 .不要使用二级以上的内部类81 .把内部类定义成私有类82 .去掉接口中多余的定义(不使用public ,abstaract, static,final等这是接口默认的)83 .不要定义不会被用到得局部变量,类私有属性和私有方法和方法参数84 .显示初始化所有的静态属性85 .不要使用System,getenv(方法86 .不要硬编码n作为换行符87 .不要直接使用java.awt.peer*里面的接口88 .使用system.arrrycopy(),不使用循环来复制数组89 .避免不必要的instanceof比较运算和类造型运算90 .不要在finalize。方法中删除监听器(listeners)91 .在 finalize。方法中的 finally 中调用 super.finalize()方法92 .在finalize。方法中调一定调用super.finalize()方法93 .进行字符转换的时候应该尽可能的较少临时变量94 .使用ObjectStream的方法后,调用reset(解放对象95 .线程同步中,在循环里面使用条件测试(使用while(isWait)wait()代替 If(iswait)wait)96 .不调用 Thread类的 resume(),suspend(),stop()T法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 .不要对浮点数进行比较运算 如=!=减少 ,。234 .一个字符的连接使用而不使用,如:String a=b+二c235 .不要在循环体内调用同步方法和使用try-catch块。236 .不要使用不必要的布尔值比较,如: if(a equals(b),而不是if(aequals(b)=true)。237 .常量字符串使用 String,非常量字符串使用 StringBuffer。238 .在循环条件判断的时候不要使用复杂的表达式。239 .对于“if(condition)do1;elsedo2;语句使用条件操作符“if(condition)?do1:do2 ”。240 .不要在循环体内定义变量。241 .使用StringBuffer的时候设置初始容量。242 .尽可能的使用局部变量进行运算。243 .尽可能少的使用“! ”操作符。244 .尽可能的对接口进行 instanceof运算。245 .不要使用Date口,而要使用long口替代。246 .不要显式调用 finalize() o247 .不要使用静态集合,其内存占用增长没有边界。248 .不要重复调用一个方法获取对象,使用局部变量重用对象。249 .线程同步中,使用 notifyAll()代替notify()250 .避免在同步方法中不能调用另一个同步方法造成死锁。251 .非同步方法中不能调用wait(),notify()方法。252 .使用 wait(),notify()代替 while(),sheep().253 .不要使用同步方法,使用同步块(5级)。254 .把所有的公有方法定义为同步方法(5级)。255 .实现的Runnablerun()方法必须是同步方法(5级)。256 .一个只有abstract方法final static属性的类应该定义成接口。257 .在clone()方法中应该而且必须使用superclone()而不是new.258 .常量必须定义为final.259 .在for循环中提供终止条件。260 .在for,while循环中使用增量计数。261 .使用 StringTokenizer 代替 indexof()和 substring.262 .不要在构造器中使用非final方法。263 .不要对参数进行赋值操作。264 .不要通过名字比较两对象的类,应该使用getclass().265 .安全:尽量不要使用内部类。266 .安全:尽量不要使用类可以克隆。267 .安全:尽量不要使用接口可以序列化。268 .安全:尽量不要使用友好方法,属性和类。269 . servlet:不要使用 JavabeansBeansinstantiate(方法。270 . servlet:不要使用 HttpSession时,应该尽早使用 inralidate方法释放.271 . servlet:不要使用JDBC资源时,应该使用 close()方法释放.272 . servlet:不要使用 servlet 的 SingleThreadMonde,会消耗大量资源。273 .国际化:不要使用一个字符进行逻辑操作,使用 MessagFormat274 .国际化:不要使用 DatetoString(),TimetoString()方法。275 .国际化:字符和字符串常量应该放在资源文件中276 .国际化:字符使用数字toString()方法。277 .国际化:不要使用 StringBuffer String Tokenizer 类。278 .国际化:不要使用 String类的compareTo(),equals()方法。279 .复杂度:建议最大规模:280.继承层次5层281.类的行数1000行(包含)282.类的属性10个283.类的方法20个284.英的友方法10个285.类私有方法15个286.类保护方法10个287.类公后方法10个288.类调用方法20个289.方法参数5个290.Return语句1个291.方法行数30行292.方法代码20293.注释比率30%50%13
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 方案规范


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!