一:不容許使用漢語拼音命名
欠規範代碼示例:
public void zengJiaYongHu(){} 拼音方法名稱
規範代碼示例:
public void addUser(){}
解析:應當使用國際化語言,拼音使得代碼難懂
二:Package名必須所有小寫,而且必定要域名的反轉,儘可能使用單個單詞,不要以關鍵字或者熟悉的詞開頭,譬如Java,javax,ognl,否則會引發莫名其妙的異常
欠規範代碼示例:
com.lxit.daoImpl 單詞大寫了,daoImpl多個單詞 java.manager ognl.test.
規範代碼示例:
com.easytopit.dao.impl
解析:這是一個你們都認同的習慣寫法,也是一個默認的規範
三:局部變量及輸入參數不要與類成員變量同名(get/set方法與構造函數除外)
欠規範代碼示例:
public class UserDAOImpl{
private int count;
pubic void page(int count){}
}
類字段和方法參數名相同
規範代碼示例:
public class UserDAOImpl{
private int count;
pubic void page(int pageCount){}
}
解析:類變量會引發邏輯錯誤,引發覆蓋。
四:儘可能不要在變量後面加魔法數字,英文單個字母和沒有實際意義的英文數字單詞來區分變量
欠規範代碼示例:
String One; 命名一個英文數字的變量
User user1 = new User();
User user2 = new User();
規範代碼示例:
User userAdd = new User();
User userUpdate = new User();
解析:這樣會下降代碼的可讀性,而且不容易往後開發人員的維護
五:包,類,變量命名不要加下劃線(能夠用駝峯命名解決)(常量除外)
欠規範代碼示例:
com.tag_test.dao.jdbc_impl 有下劃線的包名
int user_age ; 帶下劃線的變量名
public class Class_ {} 帶下劃線的類名
規範代碼示例:
com.tag.test.dao.jdbc.impl
int userAge ;
public class Classes {}
解析:一種習慣性的用法,默認的規範
六:常量命名要大寫,單詞之間要用下劃線分開.
欠規範代碼示例:
public static final String teamAdd = "teamAdd"; 小寫且沒有下劃線
規範代碼示例:
public static final String TEAM_ADD = "teamAdd";
解析:容易區分變量和常量
七:方法名第一個字母小寫(構造方法除外).
欠規範代碼示例:
public void Function(){} 大寫的方法名
規範代碼示例:
public void function(){}
解析:習慣用法,默認的規範
八:兩個單詞以上的變量名要駝峯命名
欠規範代碼示例:
int userage; age 單詞'a' 小寫
規範代碼示例:
int userAge;
解析:可以更清晰的看懂變量所帶表明的意思
九:每一個變量要用別人看得懂的詞語來描述,儘可能不要省略.
欠規範代碼示例:
private Student stu ; 把student 簡寫成 stu
規範代碼示例:
private Student student;
解析:使代碼看起來清晰令人易懂
十:類的命名通常是名詞(有些ing的動詞,形容詞除外),而且是單數,變量名也是同樣.函數的命名必須是動賓短語(構造詞除外).
欠規範代碼示例:
public class Manage{} 動詞類命
規範代碼示例:
public class UserManager {}
解析:能使別人一看到類名就知道這個類大概是作什麼的。
十一:數據庫鏈接對象的生成不能跟Model層混攪,必須將其放在一個單獨的類裏,用單例模式來實現數據庫的鏈接.
欠規範代碼示例:
java
規範代碼示例:mysql
解析:數據庫鏈接應當單獨出去出來,以便其它類能夠複用
十二: id通常不用int類型,用Long類型
欠規範代碼示例:
int id; int 類型的關於人員的id
規範代碼示例:
Long id;
解析:隨着id的增加,當增加的id超出int的範圍的時候就會出現異常web
十三:sql語句必定要用佔位符,不能用拼寫組成的語句(不然會引發Sql注入安全問題)sql
欠規範代碼示例:數據庫
規範代碼示例:windows
解析:很容易出現錯誤,並且不清晰,不容易讓人讀懂。數組
十四:當一個變量在每一個方法裏面使用,而且每一個方法裏面包含的內容不同,那麼這個變量不要用字段變量,要用局部變量,譬如PreparedStatement 最好不要聲明爲類字段.
欠規範代碼示例:tomcat
規範代碼示例:安全
解析:雖然不少類都使用到了PrepareStatement對象,但各個方法裏用到的PrepareStatement對象都是不一樣的,併發
因此不能做爲類字段,抽取出來作類字段的話會出現數據混亂的問題
十五:作主鍵的列沒有任何業務邏輯,沒有任何實際意義,並且任什麼時候候都不能修改。
欠規範主鍵示例:主鍵用一個身份證號碼,或者學號
規範主鍵示例:主鍵用id,惟一性的,不可改變的。
解析:雖然身份證號碼和學號也是惟一性的,可是他們是有意義的列,並且在程序升級時是能夠更改的,
而id主要就是用來作主鍵的
十六:取記錄的時候,拿數據庫條件語句去比較,不要本身用Java代碼去比較.
欠規範代碼示例:
規範代碼示例:
解析:一旦取出的數據量過大,而用java代碼的if判斷的話,會影響運行速率,還可能致使內存不足等錯誤。
二十二:兩個不一樣的包不能出現相同的文件名
欠規範示例:
packge com.lxitedu.work.MyWork.java
packge com.lxitedu.task.MyWork.java
規範示例:
packge com.lxitedu.work.MyWork.java
packge com.lxitedu.task.Work.java
解析:當一個在一個龐大的系統的時候,極可能引發混淆
二十三:提交代碼前若是有TODO標籤,要刪除掉,若是要標記沒有作完的任務或者之後要改進的任務,用LXTODO.
欠規範代碼示例: 暫時無
規範代碼示例:暫時無
解析:暫時無
二十四:註釋掉的代碼提交前要刪除,通常刪除本身的註釋的代碼,但不要刪除別人註釋的代碼。
欠規範代碼示例:
提交前沒有刪除這段代碼
規範代碼示例:刪掉就好了
解析:既然代碼在程序中沒有用到的話就要刪除,以避免其餘隊員看到誤解和浪費他人時間來讀其代碼。
二十六:PreparedStatement、ResultSet、Statement.對象用完以後必須進行調用close()將會關閉(在finally關閉),當即釋放此 Statement 對象的數據庫和 JDBC 資源,否則會佔用系統不少資源.
// 此規範能夠用適配器模式解決,沒必要手動去關閉了
二十七:儘可能不要在構造方法裏初始化代碼.
欠規範代碼示例:
規範代碼示例:
public class Person{
public Person()
}
解析:由於在構造器裏初始化沒辦法控制,構造器多了也容易出現混亂。若是有反射機制,也許會跳過構造方法。
二十八:函數的返回值類型(若是有的話)要和其功能相匹配,要符合常規思惟.
欠規範代碼示例:
規範代碼示例:
解析:是獲得一個用戶的姓名,而不是獲得一我的的姓名,由於人不必定是用戶,因此用getUserName更準確一點
二十九:內部類的變量不要設爲全局變量(public 字段變量),儘可能少用全局變量,多用局部變量
欠規範代碼示例:
規範代碼示例:
解析:暫時無
三十:若是是布爾型的變量則最好在命名用is或has開頭。例如:isVisible,isExists等.
欠規範代碼示例:
boolean flag=resultSet.next();
規範代碼示例:
boolean hasNext=resultSet.next();
解析:難懂,且沒有任何意義。
三十一:若是變量命名要加註釋,說明命名不是很準確(若是公司須要強制寫註釋,或者這個變量比較複雜除外).
欠規範代碼示例
//配置文件的路徑
String path="java/tomcat/web.txt";
規範代碼示例:
String configFilePath="java/tomcat/web.txt";
解析:命名清晰能夠加強代碼的可讀性,節省編輯和閱讀時間。
三十二:任何類字段除非必要(例如常量),不然都要私有化.
欠規範代碼示例:
規範代碼示例:
解析:沒有爲程序的安全考慮。能夠被其餘的類訪問
三十三:儘可能減小一個類屬性的做用域,在離使用它的最近的地方定義.
欠規範代碼示例:
規範代碼示例:
解析:當別人維護易引發混淆,容易引起錯誤
三十四:單例模式的使用必需要考慮到同步.
欠規範代碼示例:
規範代碼示例:
解析:當有多個用戶併發使用的時候會形成數據的混亂,致使線程不安全
三十五:方法裏面參數最好不要超過三個.
欠規範代碼示例:
規範代碼示例:
or//若是超過三個 必須把數據封裝成一個pojo 以下把上面update方法中參數封裝起來
解析:參數多容易出現錯誤。尤爲是調用的時候,若是參數的順序傳錯了,將是一個很是大的麻煩,並且沒有拓展性
三十六:值類或值對象必須重寫toString方法.
欠規範代碼示例:
規範代碼示例:
解析:toString的做用是一字符串的形式來返回它的實例信息,由於不一樣的類的信息時不一樣的,因此要重寫,不能所有都繼承Object的toString方法。
三十七:重寫equals方法的時候,必須重寫hashCode方法.
欠規範代碼示例:
規範代碼示例:
解析:重寫equals和hashcode方法是爲了像Set同樣不能存儲重複的元素,實現serializable是爲了使這個類能夠序列化
三十八:單元測試的時候必須是對象比較,若是一個字段有100個字,有時候數據庫會自動刪除一些,此時咱們就不知道程序那出bug了
欠規範代碼示例:暫時無
規範代碼示例:暫時無
解析:實用的開發經驗
三十九:單元測試類名後面要加Test.
欠規範代碼示例:
//這是一個UserDAO的單元測試類
public class UserDAO{}
規範代碼示例:
public class UserDAOTest{}
解析:這樣寫讓別人知道這個類是用作測試的,清晰易懂
四十:操做提示顏色,成功用藍色字體,錯誤用紅色字體.
欠規範代碼示例: 暫時無
規範代碼示例: 暫時無
解析: 暫時無
四十一:控制層不能調用model層除了最頂級的接口外任何內容。要經過new頂級接口才能調用
欠規範代碼示例:
規範代碼示例:
解析:這樣作不只是爲了程序的靈活着想,更是爲了使代碼的層次結構清晰明瞭
四十二:返回類型儘可能是父類接口或是抽象類,例如:要取得一個arrayList<User>對象,則返回類型要用List<User>。(父類或接口聲明,子類實現)
欠規範代碼示例:
規範代碼示例:;
解析:擴大對象的接受範圍,更有拓展性
四十三:SQL表或者字段裏命名要注意,不能把關鍵詞做爲屬性.
欠規範代碼示例:
規範代碼示例:
解析:SQL語句裏字段名爲關鍵字時,執行時就可能會出現問題,出錯了很難找,因此在開始的時候就要注意.
四十四:使用try...catch時,通常在finally裏面的close()能夠不捕獲異常,但必定要在catch處理異常(相似於治病打麻醉藥)
欠規範代碼示例:
規範代碼示例:
解析:若是程序出現了異常,而catch塊又沒有任何錯誤輸出,那麼你的程序將永遠不會報錯,就沒法發現錯誤,可是你的程序
老是有問題的,但又很難發現錯誤在哪裏
四十五:當可以用工廠實例化對象的時候不要用構造器生成對象,要用工廠方法去代替。
欠規範代碼示例:
規範代碼示例:
解析:爲了程序擴展性考慮,當構造器裏的改變的時候,好比說增長一個參數,可能會由於系統過於龐大而忘記了修改
而用工廠模式能夠一勞永逸
四十六:屬性不能成爲一個類 也不能成爲一個函數名.
欠規範代碼示例:
規範代碼示例
解析:對象的屬性只能做爲屬性,不能單獨作一個類
四十七:若是一個方法的返回值是用來作判斷的,返回值最好不要用字符串,要用int,
欠規範代碼示例:
規範代碼示例:
解析:由於字符串容易引起潛在的錯誤,好比失誤的操做使得字符串多了個空格等等。
四十八:在eclipse中,一次啓動的工程最好不要超過兩個以上。
不可取的操做:
在tomcat中一次加載多個(兩個以上)工程
正確的操做:
加載的工程最多不要超過兩個,不用的工程關閉
解析:啓動多了佔用資源,出錯了檢查也不方便,也容易起衝突
五十一:在類中,重複了兩次以上且公用的變量通常都要抽出成爲類字段。
欠規範代碼示例:
規範代碼示例:
解析:增長代碼的可讀性,
五十二:程序代碼中不要出現魔法數字。
欠規範代碼示例:
規範代碼示例:
解析:憑空出現的數字沒人知道它是什麼。很難令人讀懂
五十三:數據庫語句中,不要用*來代替也不能出現用變量拼寫的語句
欠規範代碼示例:
規範代碼示例:
解析:1.用屬性名而不用*讓語句看起來更加清析易懂。
2.在增長或刪除屬性的時候出錯的機率更少,也容易找出問題來。
3.通常狀況不要去拼湊sql語句,應當用佔位符,預處理來發送sql語句;
五十四:方法命名的時候必定要力求精準,好比:查詢的時候要命名爲queryAll或者queryByID.
欠規範代碼示例:
//查詢全部用戶若是有多個查詢方法的話 public void query(){- - - } //未免太過模糊
規範代碼示例: //根據ID來查找用戶; public void queryById(Long id){ //代碼塊 } //查詢全部用戶 public void queryAll(){}
解析:若是隻有一個query太模糊了很難知道是查什麼用的.
五十六: 有返回類型的方法,不能返回一個null
欠規範代碼示例:
規範代碼示例:
解析:一個方法有返回類型,就不能返回null或0. 若是要返回null時或0,則要寫一個自定義的異常.返加這個自定義異常. 或者用集合工具類的emptyList方法返回一個空集合。
五十七: 類裏面不能寫空方法.若是有必要,則在方法裏面要加一個註釋
欠規範代碼示例:
//寫了一個空的方法
public void init(){ }
規範代碼示例:
//在方法裏面加上註釋
public void init(){ //TODO 該方法尚未寫完,待完成. }
解析:若是一個方法裏面什麼都沒有寫,那麼要刪除. 若是是實現過來的必需要重寫該方法而不作會事的,應該要加註釋.
五十九:若是是在PersonDAO 類裏面,寫增長方法就不用加後綴了.
欠規範代碼示例: