8種常見的Java不規範代碼

在工作上,我最近對一個現有的Java項目代碼進行了清理。完成之後,我發現了一些反覆出現的不規範代碼。所以,我把它們整理成了一個列表出來分享給我的同行希望能引起注意並改善代碼的質量和可維護性。
這個列表不區分順序,全部來自一些代碼質量檢查工具,如 CheckStyleFindBugs 和 PMD

在Eclipse中格式化源代碼並管理import語句
Eclipse提供了自動格式化源代碼和管理import語句的功能(並移除未使用的語句)。你可以使用下面的快捷鍵來使用這些功能。
  • Ctrl + Shift + F – 格式化源代碼。
  • Ctrl + Shift + O – 管理import語句並移除未使用的語句。
除了手動執行這兩個功能外,你還可以讓Eclipse在保存文件的時候自動格式化源代碼並自動管理import語句。要做到這個,在Eclipse中,到 Window -> Preferences -> Java -> Editor -> Save Actions並啓用 Perform the selected actions on save,選中 Format source code和 organize imports

避免在方法中出現多個return語句(退出點):
在你的方法中,確保只有一個 退出點。不要在一個方法中使用多於一個return語句。

如,下面的代碼是 不推薦的,因爲它有多個退出點(return語句)。
1 private boolean isEligible(int age){
2   if(age > 18){
3     return true;
4   }else{
5     return false;
6   }
7 }

上面的代碼可以這麼寫(當然,下面的代碼還可以改進,後面再說)。
1 private boolean isEligible(int age){
2   boolean result;
3   if(age > 18){
4     result = true;
5   }else{
6     result = false;
7   }
8   return result;
9 }

簡化if-else方法:
我們寫了一些只要一個參數的工具方法,檢查一些條件並根據條件返回一個值。如,在上面見到的isEligible方法。
1 private boolean isEligible(int age){
2   boolean result;
3   if(age > 18){
4     result = true;
5   }else{
6     result = false;
7   }
8   return result;
9 }

可以只使用一個return語句來重寫此方法。
1 private boolean isEligible(int age){
2   return age > 18;
3 }

不要爲Boolean,Integer或String創建新的實例:
避免創建新的Boolean,Integer,String等實例。使用Boolean.valueOf(true)代替new Boolean(true)。兩種寫法效果差不多但卻可以改善性能。

在代碼塊周圍使用大括號:
永遠不要忘記在塊類型語句(如:if,for,while)周圍使用大括號。這可以減少代碼歧義並且避免在你修改代碼塊的時候產生新的bug。
不推薦
1 if(age > 18)
2   return true;
3 else
4   return false;

推薦
1 if(age > 18){
2   return true;
3 }else{
4   return false;
5 }

把方法的參數聲明爲final類型:
總是在所有兼容的地方把把方法的參數聲明爲final。這樣做的話,當你無意中修改了參數的值,編譯時會得到警告,並且編譯生成的字節碼也會得到優化。
推薦
1 private boolean isEligible(final int age){ ... }

用大寫命名public static final類型成員變量:
總是使用大寫命名用public static final類型變量。這樣可以讓你很容易區分常量和本地變量。
不推薦
1 public static final String testAccountNo = "12345678";

推薦
1 public static final String TEST_ACCOUNT_NO = "12345678";

把多個if語句合併成一個:
下面的代碼
1 if(age > 18){
2   if( voted == false){
3     // eligible to vote.
4   }
5 }

可以使用一個if語句改寫爲:
1 if(age > 18 && !voted){
2   // eligible to vote
3 }

別忘了給switch添加default語句:
總是給switch添加一個default語句。

避免 重複 使用同樣的字符串,創建一個常量吧:
如果你需要在多個地方使用同一個字符串,那就創建一個字符串常量來使用吧。
下面的代碼:
1 private void someMethod(){
2   logger.log("My Application" + e);
3   ....
4   ....
5   logger.log("My Application" + f);
6 }

可以創建一個常量代替字符串"My Application":
1 public static final String MY_APP = "My Application";
2  
3 private void someMethod(){
4   logger.log(MY_APP + e);
5   ....
6   ....
7   logger.log(MY_APP + f);
8 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章