阿里編碼規范學習


針對附錄中的阿里編碼規范,直接指定標題位置,或列出相應規范內容,與其說是編碼規范,不如說是新手防坑指南,菜鳥們很值得一看。

一編碼規范

(一)命名規約

6.【強制】抽象類命名使用 Abstract 或 Base 開頭;異常類命名使用 Exception 結尾;測試類 命名以它要測試的類的名稱開始,以 Test 結尾。

7.【強制】中括號是數組類型的一部分,數組定義如下:String[] args;

    個人理解:禁止使用String args[]。同時數組創建又分為動態創建和靜態創建,

    靜態:int intArray [] = {30,31,32}

    動態:int[] intArray = new int[3];

  動態數組能夠在實際應用中改變長度,arrayList就是一個復雜的動態數組。靜態不能改變長度。

8.【強制】POJO 類中布爾類型的變量,都不要加 is.

    個人理解:容易造成某些框架的或關鍵字的識別混亂。

12. 【推薦】接口類中的方法和屬性不要加任何修飾符號(public 也不要加)

    個人理解:因為接口中的方法等一定要被實現,所以除了public都沒什么意義。既然只能加public那就直接省略了,將其默認為public

13.【強制】很多人對實現類命名時使用的時imp。這里建議使用impl,就是為了統一標准。統一的命名規范能夠更好的利用通配符,例如調包時xxx.com.test.*.impl。

13.【參考】方法命名規則。統一方面命名規則后能夠直接通過方面名就知道方法的大概通途。如:查詢單個對象用get。

(二)常量定義

1. 【強制】不允許出現任何魔法值(即未經定義的常量)直接出現在代碼中。反例: String key="Id#taobao_"+tradeId;

    個人理解:解決硬編碼問題。方便后期維護及全家利用。

3. 【推薦】不要使用一個常量類維護所有常量,應該按常量功能進行歸類,分開維護。

5. 【推薦】如果變量值僅在一個范圍內變化用 Enum 類。

正例:public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}

(三)格式規約

5. 【強制】縮進采用 4 個空格,禁止使用 tab 字符。

6. 【強制】單行字符數限制不超過 120 個,

7. 【強制】方法參數在定義和傳入時,多個參數逗號后邊必須加空格。

10. 【推薦】不同業務邏輯和語義之間要插入一行(僅一行)空行。

(四)OOP規約

3. 【強制】相同參數類型,相同業務含義,才可以使用 Java 的可變參數,

8. 【強制】關於基本數據類型與包裝數據類型的使用標准如下: 1) 所有的 POJO 類屬性必須使用包裝數據類型。 2) RPC 方法的返回值和參數必須使用包裝數據類型。 3) 所有的局部變量【推薦】使用基本數據類型。

  個人理解(1)和(2)中使用基本類型時,初始化或返回值為null時會默認為0,如果0有特殊含義將會造成不必要的異常。對於(3)中的理解。局部變量隨着方法的存在而調用,隨着方法的銷毀而銷    毀。如果是封裝類型,當我們多次調用這個方法時,就會創建很多次封裝類型的變量,如果用基本類型則會避免。

9. 【強制】定義 DO/DTO/VO 等 POJO 類時,不要設定任何屬性默認值。

  個人理解:更新操作的時候可能產生錯誤數據,例如時間字段。

17. 【推薦】循環體內,字符串的聯接方式,使用 StringBuilder 的 append 方法進行擴展。

  個人理解:減少new String的次數,節省內存

(五)集合處理規則

1. 【強制】關於 hashCode 和 equals 的處理,遵循如下規則:

  1) 只要重寫 equals,就必須重寫 hashCode。 2) 因為 Set 存儲的是不重復的對象,依據 hashCode 和 equals 進行判斷,所以 Set 存儲的 對象必須重寫這兩個方法。 3) 如果自定義對象做為      Map 的鍵,那么必須重寫 hashCode 和 equals。

  個人理解:避免equals相等時,hashCode不相等。equals()相等的兩個對象,hashcode()一定相等;equals()不相等的兩個對象,卻並不能證明他們的hashcode()不相等。

2. 【強制】ArrayList的subList結果不可強轉成ArrayList,否則會拋出ClassCastException 異常:

  個人理解:subList后只是在原ArrayList基礎上拿我想要的部分。對原集合和subList視圖集合操作時會相互影響。

8.【強制】在JDK7版本以上,Comparator要滿足自反性,傳遞性,對稱性。
  個人理解:特別注意相等情況下胡處理。
10. 【推薦】使用 entrySet 遍歷 Map 類集合 KV ,而不是 keySet 方式進行遍歷。
  個人理解:個人感覺要根據實際情況,例如有些時候我們只需要key,當key-value都取出后要進一步處理,如果集合足夠小,遍歷時不是很吃內存等。可以考慮使用keyset。
(五)並發處理
  並發部分知識理解的不好,留以后再寫
(七)控制語句
3. 【推薦】推薦盡量少用 else ,推薦使用衛語句或狀態設計模式。
  個人理解:衛語句就是把特色情況分別做特殊判斷,減少判斷的嵌套層數。狀態設計模式就是把各種狀態封裝成類。該不同狀態的類對操作接口靜態方法的做不同實現。這樣就可以根據狀態進行不同操作了。參見 http://www.cnblogs.com/wxisme/p/4544432.html
(八)注釋
7. 【推薦】代碼修改的同時,注釋也要進行相應的修改,尤其是參數、返回值、異常、核心邏輯等的修改。
  個人理解:日后維護會以此為參照,避免產生錯誤。
11. 【參考】特殊注釋標記,請注明標記人與標記時間。
  1 ) 待辦事宜 (TODO)
  2 ) 錯誤,不能工作 (FIXME) 
(九)其他

4. 【強制】注意 Math . random() 這個方法返回是 double 類型,注意取值的范圍 0≤ x <1 ( 能夠取到零值,注意除零異常 ) ,如果想獲取整數類型的隨機數,不要將 x 放大 10 的若干倍然后取整,直接使用 Random 對象的 nextInt 或者 nextLong 方法。
  個人理解:Random.nextInt效率更高

二、異常日志 
( ( 一) ) 異常處理
1. 【強制】不要捕獲 Java 類庫中定義的繼承自 RuntimeException 的運行時異常類

  個人理解:運行時異常是編程錯誤,一般是編程邏輯錯誤引起的,應該從編程角度盡量避免次類異常的產生。

1. 【強制】應用中不可直接使用日志系統 (Log 4 j 、 Logback) 中的 API ,而應依賴使用日志框架SLF 4 J 中的 API

  個人理解:找到一個關於這方面解讀的博客,直接將總結部分粘來了

  • 在你的開源或內部類庫中使用SLF4J會使得它獨立於任何一個特定的日志實現,這意味着不需要管理多個日志配置或者多個日志類庫,你的客戶端會很感激這點。
  • SLF4J提供了基於占位符的日志方法,這通過去除檢查isDebugEnabled(), isInfoEnabled()等等,提高了代碼可讀性。
  • 通過使用SLF4J的日志方法,你可以延遲構建日志信息(Srting)的開銷,直到你真正需要,這對於內存和CPU都是高效的。
  • 作為附注,更少的暫時的字符串意味着垃圾回收器(Garbage Collector)需要做更好的工作,這意味着你的應用程序有為更好的吞吐量和能。

(未完待續)

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM