- 1. 编码规范为什么要坚持编码标准和规范?
可靠性
可读性/维护性
移植性
- 2. 编码规范排版规范
注释规范
命名规范
编码规范
- 3. 编码规范排版规范
程序块要采用缩进风格编写,缩进的空格数为4个。
分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
不允许把多个短语句写在一行中,即一行只写一条语句
if, for, do, while, case, switch, default 等语句自占一行,且if, for, do, while等语句的执行语句无论多少都要加括号{}。
相对独立的程序块之间、变量说明之后必须加空行。
对齐只使用空格键,不使用TAB键。
在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。
- 4. 编码规范注释规范
一般情况下,源程序有效注释量必须在30%以上。
包的注释:包的注释写入一个名为 package.html 的HTML格式的说明文件放入当前路径。
包的注释内容:简述本包的作用、详细描述本包的内容、产品模块名称和版本、公司版权。
文件注释:文件注释写入文件头部,包名之前的位置。
文件注释内容:版权说明、描述信息、生成日期、修改历史。
类和接口的注释:该注释放在 package 关键字之后,class 或者 interface 关键字之前。
类和接口的注释内容:类的注释主要是一句话功能简述、功能详细描述,
类属性、公有和保护方法注释:写在类属性、公有和保护方法上面。
成员变量注释内容:成员变量的意义、目的、功能,可能被用到的地方。
公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、违例等。
- 5. 编码规范注释规范(续)
对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的异常,选择主要的在注释中说明。 对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明。
注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
注释与所描述内容进行同样的缩排。
*将注释与其上面的代码用空行隔开。
对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
注释的内容要清楚、明了,含义准确,防止注释二义性。
避免在注释中使用缩写,特别是不常用缩写。
- 6. 编码规范命名规范
包名采用域后缀倒置的加上自定义的包名,采用小写字母。在部门内部应该规划好包名的范围,防止产生冲突。部门内部产品使用部门的名称加上模块名称。产品线的产品使用产品的名称加上模块的名称。
类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合法。
方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。
方法中,存取属性的方法采用setter 和 getter方法,动作方法采用动词和动宾结构。
属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同。
常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用 final static 修饰。
属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用 this 引用,引用静态成员变量时使用类名引用。
- 7. 编码规范编码规范
明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编写方法实现。
应明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身负责,缺省是由方法调用者负责。
明确类的功能,精确(而不是近似)地实现类的设计。一个类仅实现一组相近的功能。
所有的数据类必须重载toString() 方法,返回该类有意义的内容。
数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close()。
异常捕获后,如果不对该异常进行处理,则应该纪录日志或者ex.printStackTrace() 。
自己抛出的异常必须要填写详细的描述信息。
运行期异常使用RuntimeException的子类来表示,不用在可能抛出异常的方法声明上加throws子句。非运行期异常是从Exception继承而来的,必须在方法声明上加throws子句。
- 8. 编码规范编码规范
在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。
注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变量来代替。
数组声明的时候使用 int[] index ,而不要使用 int index[] 。
调试代码的时候,不要使用 System.out 和 System.err 进行打印,应该使用一个包含统一开关的测试类进行统一打印。
用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
- 9. java注释规范导入模板
- 10. java注释规范导入模板
- 11. java注释规范例:源码
- 12. java注释规范例:加注释
- 13. 静态检查工具Checkstyle:CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。
Findbugs: FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。它不注重样式或者格式,试图只寻找真正的缺陷或者潜在的性能问题。
PMD:PMD是一个代码检查工具,用于检查Java源代码,发现一些潜在的b问题,如:空的try/catch/finally/switch语句;未使用的局部变量、参数、私有方法等;不必须的if语句、可以使用while循环完成的for循环;重复的代码等错误。
Logiscope(付费):Logiscope是面向源代码进行工作的,贯穿于软件开发、代码评审、单元测试、集成测试、系统测试、以及软件维护阶段,对代码分别进行静态度量、编程风格检测、和测试覆盖率分析。
Jtest(付费):jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性。
- 14. 动态工具
Junit:JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何完成功能和完成什么样的功能。
TestNg:TestNG,这是一个测试 Java 应用程序的新框架。TestNG 不仅确实强大、创新、可扩展、灵活,它还展示了 Java Annotations(JDK 5.0 中的重大新特性)的有趣应用。
jtest(付费):Jtest先分析每个java类,然后自动生成junit测试用例并执行用例,从而实现代码的最大覆盖,并将代码运行时未处理的异常暴露出来