1. 为什么要有编码规范
编码规范对于程序员而言尤为重要,有以下几个原因:
- 一个软件的生命周期中,80%的花费在于维护;
- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;
- 编码规范可以改善软件的可读性,可以让程序员尽快并彻底地理解新的代码;
- 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误;
2.编码规范
package java.test;
import java.test.test1.TestClass;
/**
* Class description goes here.
*
* @version 1.82 18 Mar 1999
* @author Firstname Lastname
*/
public class Son extends TestClass {
/** classVar1 documentation comment */
public static int classVar1;
/**
* classVar2 documentation comment that happens to be
* more than one line long
*/
private static Object classVar2;
/** instanceVar1 documentation comment */
public Object instanceVar1;
/** instanceVar2 documentation comment */
protected int instanceVar2;
/** instanceVar3 documentation comment */
private Object[] instanceVar3;
/**
* ...constructor Son documentation comment...
*/
public Son () {
// ...implementation goes here...
}
/**
* ...method doSomething documentation comment...
*/
public void doSomething() {
// ...implementation goes here...
}
/**
* ...method doSomethingElse documentation comment...
* @param someParam description
*/
public void doSomethingElse(Object someParam) {
// ...implementation goes here...
}
}
3.编程实践
- 若没有足够理由,不要把实例变量或类变量声明为公有;
- 类变量名不要以下划线开头;
- 最小化变量的作用域;
- 尽量不要使用静态变量;
- 所有的变量名/方法名都应该是见明知意的,不要使用temp,l,x等变量名;
- 变量定义的时候一定要初始化;
- 不要硬编码,即使它只使用了一次;
- 在含有多种运算符的表达式中使用圆括号来避免运算符优先级问题;
- 完成代码的时候,一定要和式样一致;
- 更改的画面一定要在至少在中、日和英文系统(各一个)的真实环境下进行测试;
- 容器类(map或list)在使用之前一定要保证它的正确初始化(里面没有垃圾数据);
- 提交代码之前要充分的CDI,尽量进行交叉review,而且review者最好是不懂改造点的人;
- 提交代码之前要比较差分,确保提交的source是正确的;
- 不要将测试数据提交到数据库中;
- 在做GUI的时候,只要有按钮点击,并出现别的画面的时候,必须考虑多重启动的问题;
- 如果编写的是数据类的话,要完成它的toString方法和clone方法;
- 代码在20行左右或者关键的地方必须出现注释;
- 不要出现3重或者3重以上的循环;
- 方法尽量控制在20到100行之内;
- 一行的字符个数不要超过80个;
- 使用空行来分割或组织代码,推荐在方法中使用1行,方法见2行,不同部分3到4行;
- 不要使用tab键,如果使用的话,在eclipse中将tab映射成4个space;
- 尽量不要copy/paste,尽量使用继承或重构的方式共享相同的代码;
- 要是copy/paste,注意更新注释;
- 在类中,public方法必须写javadoc,还要注意方法改变后同时更新注释或javadoc;
- 方法的制限和约定一定要在javadoc中写清楚;
- 注释一定要简明扼要,不要只是代码的重复;
- 不要编写只有自己能看懂的代码,简单就是最好的;
- 不要使用代码生成工具生成的代码并改造它;
- 程序的关键部分和异常都要出好trace;
- 一个函数只使用一个return,if else中的各个分支不要遗漏,case不要忘记break;
- 一定不要将重要的东西保存在桌面上;
- 不要出现e.printStackTrace()/System.out.println(),可将其输出到log中;
- 无用的代码一定要删除;
- 一定要处理异常;
- 一定要在资源使用完后将其释放,不如file,socket,数据库连接等;
- for,while等语句后面都要加上大括号;
- 给自己的代码编写单元测试项,编写的时候不要改动被测试项的代码,如果要改,使用反射;
- 方法开始的时候,一定要检查参数的有效性;
- 返回零长度的数组比返回null好;
- 注意按引用传递和按值传递的区别;
参考资料:
1. http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
2. http://www.huihoo.org/code/java_code_conventions.html#b1