1、规则1 数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close(),如果有多个IO对象需要close(),需要分别对每个对象的close()方法进行try-catch,防止一个IO对象关闭失败其他IO对象都未关闭,特别是在关闭数据库的连接,示例如下:
try{
//TODO
}catch(IOException e){
//TODO
}finally{
try{
out.close();
}catch(IOException e1){
//TODO
}finally{
try{
in.close();
}catch(IOException e2){
//TODO
}
}
}
2、规则2 自己抛出的异常必须要填写详细的描述信息,便于问题的定位:
throw new IOException("无法找到文件:"+fileName);
3、规则3 当心运算符的优先级,养成用括号明确表达式的操作顺序,避免使用默认的优先级,因为记忆不往往保证正确!
//如果下面的表达式
word = (high<<8)|low (1)
if ((a|b)&&(a&c)) (2)
if ((a|b)<(c&d)) (3)
//改写为如下形式
word = high<<8 | low (1)
a|b&&a&c (2)
a|b<c&d (3)
//虽然(1)(2)的两种写法对结果不造成影响,但是程序的可读性大大降低,而(3)的两种表达式得到不同的结果
4、规则4 不要使用不易理解的数字来代替状态,应该用有意义的标识来代替状态。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变量或者枚举来代替。
//如下的代码的可读性较差
if(0 == state){
state = 1;
//TODO
}
//应该优化成以下的代码
private final static int IDLE = 0;
private final static int BUSY = 1;
private final static int UNKNOWN = -1;
if(IDLE == state){
state = 1;
//TODO
}
5、规则5 所有的数据类必须重写toString()、hashCode()、equals() 方法,toString()方法返回该类有意义的内容。hashCode()和equals()可以用开发工具eclipse生成。
public class User{
private String name ;
private int age ;
...
public String toString (){
return "name="+name+",age="+age;
}
}
6、规则6 不要使用 System.out 与 System.err 进行控制台打印,应该使用工具类(如:日志工具)进行统一记录或者打印。
说明:代码发布的时候可以统一关闭控制台打印,代码调试的时候又可以打开控制台打印,方便调试。
7、规则7 合理消除else ,用return尽早的返回,避免逻辑过长,容易产生bug :
改造前 | 改造后 |
|
|
8、规则8 对覆盖/重写父类的方法时,必须进行@Override声明:
好处:这样做可以显示的标识此方法时覆盖父类的方法,保证覆盖父类的方法时不会因为单词写错而造成错误。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
9、规则9 常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用static final来修饰:
public static final int MAX_VALUE = 10000;
public static final String FILE_NAME = "log.txt";
10、规则10 Java1.4中大量字符串的相加操作应该使用StringBuffer,Java5.0以上版本大量字符串的“相加”操作如果不涉及到线程安全应该使用StringBuilder,如果涉及到线程的安全问题,则要使用StringBuffer,StringBuilder的性能优于StringBuffer,但是前者是非线程安全的。
StringBuilder sb = new StringBuilder();
for(int i=0;i<100000;i++){
sb.append("it.cast");
}
11、规则11 IO操作流使用有Buffer功能的类:
FileOutputStream fout = new FileOutputStream("test.txt");
BufferedOutputStream bout = new BufferedOutputStream(fout);
for (int i = 0;i < bytes.length; i++){
bout.write();
}
bout.flush();
//说明:具有Buffer功能的流类能起到更好的性能,效率会更高。
------- android培训、 java培训、期待与您交流! ----------