轉自:http://www.csdn.net/article/2012-09-11/2809829-common-code-violations-in-java
最近,我給Java項目做了一次代碼清理工作。經過清理後,我發現一組常見的違規代碼(指不規範的代碼並不表示代碼錯誤)重複出現在代碼中。因此,我把常見的這些違規編碼總結成一份列表,分享給大家以幫助Java愛好者提高代碼的質量和可維護性。
這份列表沒有依據任何規則或順序,所有的這些都是通過代碼質量工具包括CheckStyle,FindBugs和PMD檢查出。一起來看下:
一、Eclipse編譯器提供源代碼格式輸入
Eclipse提供自動源碼格式選項,並且組織輸入(刪除未使用的代碼)。你可以使用下面的這些快捷鍵進行操作。
Ctrl + Shift + F——源代碼格式
Ctrl + Shift + O——組織輸入並刪除未使用的代碼
代替手動調用這兩個函數,只需根據Eclipse自動格式和自動組織選項,可以隨時保存文件。
操作步驟,在Eclipse中進入Window -> Preferences -> Java -> Editor -> Save Actions,然後以選定的方式保存,最後檢查Format source code + Organize imports。
二、避免多個返回(退出點)
依照你的方法,確保只有一個退出點。不要在同一個地方或多個地方使用返回。比如,下面的代碼,NOT RECOMMENDED(不建議),這是因爲有多個退出點(返回語句)。
- private boolean isEligible(int age){
- if(age > 18){
- return true;
- }else{
- return false;
- }
- }
下面的代碼有所提升,這是更高版本的。
- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
三、簡化if-else
我寫了幾個實用的方法作爲參考,檢查語句條件並且基於該條件返回值。比如,考慮到isEligible方法,正如你之前所看到的:
- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
整個方法以一個單一的return語句重新編寫:
- private boolean isEligible(int age){
- return age > 18;
- }
四、不要給Boolean, Integer或者String創建新的實例
避免給Boolean,Integer,String創建新的實例。比如,使用new Boolean(true),Boolean,valueOf(true)。修改後的語句與之前的效果基本相同,除了在性能上有所提升。
五、使用大括號模塊語句
永遠別忘了使用大括號模塊語句比如if、for、while。這樣做的好處是當你在修改模塊級語句時減少了模糊代碼並且避免引進bug的機會。
不建議:
- if(age > 18)
- result = true;
- else
- result = false;
建議:
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
六、以final類型標記方法參數,任何時候都適用
請記住,以final類型標記方法參數,任何時候都適用。這樣做的好處在於當你不小心修改參數值時,編譯器會給你警告,同時它還能以更好的方式優化編譯器代碼字節。
建議:
- private boolean isEligible(final int age){ ... }
七、在UPPERCASE中命名public static final字段
在UPPERCASE中命名public static final字段(通常也被稱之爲常量)。這個可以讓你輕鬆區分常量字段和局部變量之間的不同。
不建議:
- public static final String testAccountNo = "12345678";
建議:
- public static final String TEST_ACCOUNT_NO = "12345678";,
八、組合成單一的if語句
在儘可能多的情況下,把多個if語句組合成單一的if語句,比如下面的代碼:
- if(age > 18){
- if( voted == false){
- // eligible to vote.
- }
- }
合併成單一的if語句:
- if(age > 18 && !voted){
- // eligible to vote
- }
九、Switch應該有default
始終給Switch語句添加default。
十、使用常量來避免重複定義相同的字符串值
如果你在多個地方必須使用字符串,那麼使用常量來避免重複定義擁有相同值的字符串。
比如,看下面的代碼:
- private void someMethod(){
- logger.log("My Application" + e);
- ....
- ....
- logger.log("My Application" + f);
- }
string literal“我的應用”可以作爲常量並且能在代碼中使用。
- public static final String MY_APP = "My Application";
- private void someMethod(){
- logger.log(MY_APP + e);
- ....
- ....
- logger.log(MY_APP + f);
- }