針對附錄中的阿里編碼規范,直接指定標題位置,或列出相應規范內容,與其說是編碼規范,不如說是新手防坑指南,菜鳥們很值得一看。
一編碼規范
(一)命名規約
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視圖集合操作時會相互影響。
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)需要做更好的工作,這意味着你的應用程序有為更好的吞吐量和能。
(未完待續)
