1、Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或Frutiger Bold 40pt,黑体简40pt,*,Neusoft Co.,Ltd.,Beyond Technology,编码规范及代码检查,2025/9/17 周三,
2、1,编码规范,2,内容,目的,源程序,命名规范,空白的使用,注释,类,接口,语句,3,代码规范的目的,代码的编写保持一致性,提高代码的可读性和可维护性,方便团队中的成员之间共享代码,易于代码的回顾,4,源程序,源程序命名,名字:源程序中定义的class或interface的名字,后缀:.java,供发布的文件,名字:,应该是有代表性的,后缀,:,*.jar(推荐使用);或,*.zip、*.ear、*.war等,源文件的组织,应按如下顺序书写,并且各元素之间至少一个空行分隔:,1)版本信息和版权声明,2)包的声明,3)引用声明,4)类或接口的声明,5,源程序,源文件的组织,版本信息和版权声明,作
3、为源文件开始。,*建议使用开发工具(如Eclipse)的注释功能自动完成此类工作。,*,使用部门统一的格式化和模版文件,(,只能在,Eclipse,中使用,),。,6,源程序,源文件的组织,包的声明必须是非注释的第一行,用一个空格分隔,package,关键字与包的名字,如:,package com.neusoft.softdev.firewall;,引用声明,从第一列开始,用一个空格分隔,import,关键字和引用类型名。,应保证引入类都被使用,减少引入*的使用。,import java.sql.SQLException;/GOOD,Import java.sql.*;/BAD,类或接口声明,
4、每个源程序必须有一个,class,或,interface,声明,7,命名规范,包的命名,类和接口的命名,变量命名,常量命名,方法命名,8,大家有疑问的,可以询问和交流,可以互相讨论下,但要小声点,9,大家有疑问的,可以询问和交流,可以互相讨论下,但要小声点,10,命名规范,包的命名,全部由小写字母组成。,如:,package telmecall.business.console;,package telmecall.business.exception;,package telmecall.presentation.util;,其中,telmecall,指项目名称,business,指业务逻辑
5、console,指具体模块,11,命名规范,类和接口的命名,一般由大写字母开头其它字母小写的单词组成,专有的缩写词除外,如:,AWTException,class,名字建议用名词或名词短语,interface,名字取决于其主要功能和用途,是使,Object,具有特定的功能,建议使用可以描述此功能的形容词(加上,-able,或者,-ible,后缀)如:,Searchable,Sortable,NetworkAccessible,等,否则,建议使用名词或者名词短语,12,命名规范,变量命名,采用大小写混合的形式,以小写字母开头,名字中其他单词(或只取首字母的缩写单词)以大写字母开头,其它都为小写
6、字母,不使用下划线分隔,应为名词或名词短语,例:,boolean resizable;,char recordDelimiter,13,命名规范,常量命名,建议都为大写字母,用下划线分隔单词,如:,MIN_VALUE,MAX_BUFFER_SIZE,PTION_FIEL_NAME,14,命名规范,方法命名,采用大小写混合的形式,以小写字母开头,其他单词(或只取首字母的缩写单词)以大写字母开头,所有其它字母小写。,不使用下划线分隔单词,方法命名应能描绘出方法的作用和功能,建议使用祈使动词或动词短语,获取或设置类属性的方法建议显示的命名为,getProperty(),或,setProperty()
7、其中,property,是类的属性的名字,用于判断类的布尔属性的方法建议显示的命名为,isProperty(),,,property,是指类的属性的名字,15,空白的使用,空行,空格,缩进,行的延续(折行),16,空白的使用,空行,有益于将代码按照逻辑分段,以提高代码的可读性。,下列情况用,一个,空行:,在版权声明、包声明块、引用声明块之后,在类的声明之间,在方法的声明之间,在类中声明最后一个属性之后,声明第一个方法之前,17,空白的使用,空格,下列情况建议使用单个空格:,在一个关键字和它所修饰的块之间。如:,catch,for,if,switch,synchronized,while,。
8、注意,super,this,后不要跟空格,任何关键字和它所用的参数之间。如:,return true;,一个列表中逗号之后。如:,foo(long_exp1,long_exp2,long_exp3);/GOOD,foo(long_exp1,long_exp2,long_exp3);/BAD,下列情况不建议使用空格:,左括号和后一个字符之间,右括号和前一个字符之间,if(i=42)/GOOD,if(i=42)/BAD,18,空白的使用,缩进,要求是四个,空格,TAB,在不同的源代码管理工具中因为用户设置的不同宽度不相同,因此不要使用,TAB,建议修改各管理工具的设置将,TAB,字符扩展为,4,个
9、空格,行的延续(折行),行应为,120,列,超出此限制应截成比较短的行,在逗号之后折行或一个操作符之前折行,尽可能采用高层次的折行,折行后对齐上一行语句同一层的起始位置,如果上面规则不适用,则缩进,4,个字符,19,注释,应能够帮助读者理解代码的功能和作用、程序的流程,注释要言简意赅,须注意注释的正确性,错误的注释还不如不做注释,临时的注释用“,temporary note”,进行标注,以利于将来程序发布时将其删去,如:,/temporary note:Change this to call sort()when the bugs.,源码中加入适当的注释,可自动生成与源码同步的文档,20,注释
10、版权信息注释,类注释,成员注释,方法注释,内部类的注释,其它的注释,21,注释,版权信息注释,必须在,java,文件的开头,建议如下格式:,/*,*$Header$,*$Revision$,*$Date$,*,*Copyright(c)2007,东软,IT,实训中心,*,/,22,注释,类注释,通常放在类定义的前面(类实体以外),通常详细介绍该类的功能、作者、版本,“,deprecated”,标志的使用,以及产生该类的时间和引用其他类等信息,/*,*Description:,描述该类概要功能介绍,*,*see java.lang.Class#getDeclaredMethod(String,
11、Class),*author,作者中文名,*version 1.0,2006-1-11,*deprecated,*/,23,注释,成员注释,建议所有类成员都作注释以提高可读性与可维护性,只有,public,和,protected,类型的类成员注释可被,javadoc,提取到文档中,/*,*Discription:,字段功能描述,*/,24,注释,方法注释,内容包括:,方法功能介绍,参数说明,返回类型说明,例外类型,JDK/SDK,的引入版本等,/*,*Discription:,方法功能中文描述,*param arg1,*param arg2,*author:,创建者中文名字,*update:,
12、日期,YYYY-MM-DD,更改人姓名,变更描述,*/,25,注释,内部类的注释,可参考“类注释”,其它的注释,代码修改的注释,修改单行,在上一行使用单行注释,写明修改原因,人员姓名和日期,用单行注释符号注释原行代码,在下一行添加更新的代码,冗余代码的注释,注释冗余代码行,并在前一行注明原因,注释人员姓名和日期,类体外的注释,主要包括,package,和,import,语句。引入新类包同时不需要指定引入人及日期等,log,信息,多余类包可直接删除,26,类,类的组织顺序建议如下:,类的定义,类的成员变量(字段,/,属性),类成员变量(字段,/,属性)的存取方法,构造函数,类方法(静态方法),实
13、例方法,main,方法,27,类,类的定义,包含在不同的行的,extends,和,implements,,如:,public class CounterSet,extends Observable,implements Cloneable,类的成员变量(字段,/,属性),接下来是类的成员变量,/*,*Packet counters,*/,protected int packets,;,28,类,类成员变量(字段,/,属性)的存取方法,接下来是类变量的存取方法:,/*,*Get the counters,*return an array containing the statistical da
14、ta.,*/,public int getPackets(),return packets;,public void setPackets(int packets),this.packets=packets;,29,类,构造方法,它应该用递增的方式写(如:参数多的写在后面):,public CounterSet(size),this.size=size;,类方法(静态方法),有,static,关键字,实例方法,无,static,关键字。,必要时,须加上,final,修饰符,表示本方法不可被覆盖。,30,类,main,方法,如果定义了,main(String args),方法,那应写在类底部。,
15、31,接口,定义形式类似于类的定义形式。声明采用如下格式:,public interface InterfaceName extends SuperInterfaces,/Interface Body,SuperInterface,是可用逗号分隔的接口列表,按字母顺序排列,接口体的声明建议按如下顺序:,接口的字段声明,接口的方法声明,接口字段声明与方法声明同类的字段声明与方法声明形式一样。,32,语句,简单语句,复合语句,33,语句,简单语句,赋值的表达式,每行只含一条语句,本地变量声明,应在不同的行中,对声明后不再变动应当声明为,final,,使编译器作优化,数组声明,数组的,应紧跟类型名,
16、在“,”,之前不能有空格,return,语句,return,后的表达式,应用括号包起来,简单返回值,不用括号,34,语句,复合语句,括号的格式,所有的复合语句建议采用如下花括号形式:,中的语句应该单独作为一行,在,中的复合语句应该有层次,如下的情况可以不使用花括号,语句块中包含,null,语句,或都只有简单的一行,注:有此,IDE,工具的默认设置“,”,是在行尾,请修改,IDE,工具设置,使“,”,换行显示,35,语句,复合语句,if,语句,for,语句,while,语句,do-while,语句,switch,语句,try,语句,synchronized,语句,标签语句,通常用花括号封装,标签
17、本身应在单独一行,后面跟一冒号“,:”,36,代码检查,37,内容,目的和意义,代码检查前的准备工作,代码检查,Checklist,简介,代码检查,Checklist,的使用,代码检查工具简介,代码检查工具的使用,代码检查时机,代码检查流程,练习,38,代码检查的目的和意义,检查编码规范性:,提高代码的可读性和可维护性。,一个团队中,代码容易在程序员之间共享。,易于代码的回顾。,维护部门交付产品的规范形象。,检查编码质量:,提高代码质量。,提升代码成果的交付能力。,39,编辑,Java,文件之前,已经在编辑器,Eclipse,里引入部门制定的编码风格文件,codeformatter.xml,和
18、codetemplates.xml。,从部门获取代码复查,checklist,文件。,从部门获取同行评审记录文件。,从部门获取,Checkstyle,工具包。,从部门获取,Findbugs,工具包和,Findbugs,缺陷等级,对照表。,代码检查前的准备工作,40,代码检查,Checklist,简介,JavaScript,JSP,JAVA,C+,41,代码检查,Checklist,的使用,PSM,裁剪组织的“代码复查,Checklist,”,,形成适合项目的,编码时,“代码复查,Checklist,”,,并对开发人员进行讲解。,,预防产生,Checklist,中的问题。,人工代码复查,核对,
19、Checklist,中的问题项,检查出的问题记录到“同行评审记录”中。,使用工具进行,Java,代码复查,核对,Checklist,中的问题项及其修改等级,检查出的问题记录到“同行评审记录”中。,42,Checkstyle,工具,CheckStyle,,能够自动化检查,Java,代码规范,从而使得开发人员从这项重要但是枯燥的任务中解脱出来。它能够检查:,检查,Javadoc,注释。,检查每行的最大字符数,不得超过,120,。忽略指定格式的行,如,*,号或者,/,号开始的。,检查方法的最大行数,不得超过,200,。,检查文件的最大行数,不得超过,2000,。,检查方法名称。,检查是否有空块。,检
20、查,if,、,else,是否使用,。,是否使用了,tab,键。,Checkstyle,工具简介,43,Checkstyle,插件的使用,在,Eclipse,中安装,Checkstyle,插件,对,Checkstyle,进行配置:导入规则文件,配置当前项目的,Checkstyle,选项,查看检查结果,Checkstyle,的检查在编码过程中,并非集中检查,规则文件经过精心编制,所有的问题都需要消除,44,Findbugs,工具简介,Findbus,工具:,Findbugs,是一个静态分析工具,它检查类或者,JAR,文件,将字节码与一组缺陷模式进行对比,以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况下对软件进行分析。,Findbugs,工具能够检查出的问题,详见工具包下,docbugDescriptions.html,。部门对检查结果进行了裁减,并制定了等级,详见“,Findbugs,缺陷等级对照表”。,45,Findbugs,插件的使用,在,Eclipse,中安装,Findbugs,插件,对当前项目的,FindBugs,选项进行配置,对当前项目执行,Find Bugs,操作,查看检查结果,46,日常编码,提交测试之前,产品发布之前,代码检查时机,47,






