1.統一工作目錄
2.Interface oriented programming
在定義參數類型,或者方法返回類型,使用Map或者List,不用Hashmap or ArrayList。只有在構造時才允許出現Hashmap或者ArrayListpublic List getAllProduct(); //正確。定義返回類型 public ArrayList getAllProduct(); //錯誤!!定義返回類型 public List queryByCritical(Map criticals); //定義參數類型 public List queryByCritical(HashMap criticals); //錯誤!!定義參數類型
List result = null;//定義類型的時候未List result = new ArrayList();//只有構造時出現的實現類 Map result = null;//定義類型的時候未Map result = new HashMap();//只有構造時出現的實現類
3.變量命名不允許出現下劃線,除了常量命名時用下劃線區(qū)分單詞
String user_name= null;//錯誤!!! 即使數據庫中這種風格 String userName = null;//正確寫法 int CET_SIX=6;//常量命名時用下劃線區(qū)分單詞,字符全部大寫
4.代碼中不能出現magic number
//錯誤!!不能出現如此寫法,需要定義為常量 if(user.getNumber() == 1001 ) { //do something } //正確寫法 static final int ADMINISTRATOR_ROLE_NUMBER = 1001; static final int MIN_WIDTH = 4; static final int MAX_WIDTH = 999; static final int GET_THE_CPU = 1 if(user.getNumber() == ADMINISTRATOR_ROLE_NUMBER ) { //do something }
5.不在循環(huán)中定義變量
//sample code snippet for(int i=0;i<10;i++){ ValueObject vo = new ValueObject(); }
//recommend this style ValueObject vo = null; for(int i=0;i<10;i++){ vo = new ValueObject(); }
6.NOT TAB,采用4 spaces。大家請設置ide的TAB為4 space
7.使用StringBuffer來替代String + String
不正確寫法://sample code snippet String sql =”INSERT INTO test (”; Sql+=”column1,column2,values(” Sql+=”1,2)”
正確寫法:
StringBuffer sql = new StringBuffer(); sql.append(”INSERT INTO test (”); sql.appdend(”column1,column2,values(”); sql.append(”1,2)”);
8.單語句在IF,While中的寫法. 使用Brackets 來做程序塊區(qū)分
不正確寫法:if ( condition) //single statement, code here while ( condition ) //single statement, code here
正確寫法:
//IF if ( condition) { //code here } //WHILE while ( condition ) { // code here }
9.Brackets 應當直接在語句后
if ( foo ) { // code here } try { // code here } catch (Exception bar) { // code here } finally { // code here } while ( true ) { // code here }
10.用log4j來做日志記錄,不在代碼中使用System.out
錯誤寫法:System.out.println(" debug 信息");
正確寫法:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; private static Log logger = LogFactory.getLog(SQLTable.class); logger.debug("debug 信息"); //注意這里沒有涉及字符串操作 //涉及字符串操作或者方法調用的,需要用logger.isDebugEnable()來做判斷 if(logger.isDebugEnable()){ logger.debug(String1 + string 2 + string3 + object.callMethod()); }
如果程序中需要輸出的信息為非調試信息,用logger.info來做輸出
logger.info(""Can't find column to build index. ColName=" + columnName");
11.異常處理中日志問題
錯誤寫法1:try{ //handle something } catch (Exception ex) { //do nothing. 請確定該exception是否可以被忽略!!!! }
錯誤寫法2:
try{ //handle something } catch (Exception ex) { ex.printStackTrace ();//不在程序中出現如此寫法!! }
錯誤寫法3:
try{ //handle something } catch (Exception ex) { log.error(ex);//這樣將僅僅是輸出ex.getMessage(),不能輸出stacktrace }
正確寫法:
try{ //handle something } catch (Exception ex) { log.error("錯誤描述",ex);//使用log4j做異常記錄 }
12.Release Connection ,ResultSet and Statement
//sample code snippet Connection con = null; Statement st = null; ResultSet rs = null; try { con = JNDIUtils.getConnection(); st = … rs = … } finally { JDBCUtil.safeClose(rs);//close resultset ,it is optional JDBCUtil.safeClose(st);//close statement after close resultset, it is optional JDBCUtil.safeClose(con);//make sure release it right now }
13.Replace $variableName.equals(’string’) with ‘string’.equals($variableName)
減少由于匹配的字符為null出現的nullpointexception//sample code snippet String username = … … if(“mark”.equals(userName)){ … }
14.always import classes
//recommend coding convention import java.util.HashMap; import java.util.Map; import java.util.List; //import java.util.*; NOT!! //We can use eclipse,right click, choose Source -> Organize Imports //hotkey:Ctrl+Shift+O
15.注釋
程序header,加入如下片斷。這樣將可以記錄當前文件的版本以及最后的修改人員
java,jsp中加入/** * $Id: $ * */
xml中加入
<?xml version="1.0" encoding="UTF-8"?> <!-- $Id:$ -->
16.在有issue出,加入//TODO 來記錄,以便在task中可以方便記錄未完成部分
//sample code snippet //TODO issue: the data format, should be fixed
17.domain model或者VO使用注意事項
檢查數據庫中允許為null的欄位
對從數據庫中取出的domain model或者VO,如果數據庫中允許為null,使用有必要檢查是否為nullCODE SNIPPET
//user table中的該字段允許為null,使用時就需要去check,否則可能出現nullpoint exception if(user.getDescription()!=null) { //do something }
需要完成VO中的equals,hashCode,toString 三個方法
18.JSP中約定
為每個input設定好size同maxlength
<input type="text" maxlength = "10" size="20"/>