您的位置:首页 > 职场人生

黑马程序员_java常见编码规则

2012-09-16 11:11 288 查看
------- android培训java培训、期待与您交流! ----------
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 :

改造前改造后
private String getCode(String id){
String retStr ="";
if(null==id || "".equals(id)){
retStr = "404";
}else{
String []items = id.split("/");
if(items.length<3){
retStr = "403";
}else{
retStr = "401";
}
}
return retStr;
}
private String getCode(String id){  
String retStr ="";  
 	if(null==id || "".equals(id)){ 
  		return "404";  
 	}else{   
  		String []items = id.split("/");  
  		if(items.length<3){  
   			return "403";    
  		}else{         
   			return  "401";  
  		}  
 	}
 
}
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培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息