標籤:特性 對比 索引 邏輯 table index 調用 版本 設計模式
1.所有的相同類型的封裝類對象之間值的比較,全部使用 equals 方法比較。
說明:對於 Integer var = ? 在-128 至 127 範圍內的賦值,Integer 對象是在 IntegerCache.cache 產生,
會複用已有對象,這個區間內的 Integer 值可以直接使用==進行 判斷,但是這個區間之外的所有資料,
都會在堆上產生,並不會複用已有對象,這是一個大坑,推薦使用 equals 方法進行判斷。
2.Object 的 equals 方法容易拋null 指標異常,應使用常量或確定有值的對象來調用equals。
如:"test".equals(object);
3.使用索引訪問用 String 的 split 方法得到的數組時,需做最後一個分隔字元後有無內容的檢查,否則會有拋 IndexOutOfBoundsException 的風險。
如:
String str = "a,b,c,,";
String[] ary = str.split(",");
//預期大於 3,結果是 3
System.out.println(ary.length);
4.類內方法定義順序依次是:公有方法或保護方法 > 私人方法 > getter/setter方法。
說明:公有方法是類的調用者和維護者最關心的方法,首屏展示最好;保護方保護方法雖然只是子類關心,
也可能是“模板設計模式”下的核心方法;而私人方法外部一般不需要特別關心,是一個 黑盒實現;
因為方法資訊價值較低,所有 Service 和 DAO 的 getter/setter 方法放在類體最後。
5.不要在 foreach 迴圈裡進行元素的 remove/add 操作。remove 元素請使用 Iterator方式,如果並行作業,需要對 Iterator 對象加鎖。
6.在 JDK7 版本及以上,Comparator 要滿足如下三個條件,不然 Arrays.sort,Collections.sort 會報 IllegalArgumentException 異常。
說明:
1) x,y 的比較結果和 y,x 的比較結果相反。
2) x>y,y>z,則 x>z。
3) x=y,則 x,z 比較結果和 y,z 比較結果相同。
7.利用 Set 元素唯一的特性,可以快速對一個集合進行去重操作,避免使用 List 的contains 方法進行遍曆、對比、去重操作。
8.如果是 JDK8 的應用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter代替Simpledateformatter,
官方給出的解釋:simple beautiful strong immutable thread-safe。
9.表達異常的分支時,少用 if-else 方式,這種方式可以改寫成:
if (condition) {
...
return obj;
}
10.除常用方法(如 getXxx/isXxx)等外,不要在條件判斷中執行其它複雜的語句,將複雜邏輯判斷的結果賦值給一個有意義的布爾變數名,以提高可讀性。
如:final boolean existed = (file.open(fileName, "w") != null) && (...) || (...){
...
};
if (existed) {
...
}
11.後台輸送給頁面的變數必須加$!{var}——中間的驚嘆號。
說明:如果 var=null 或者不存在,那麼${var}會直接顯示在頁面上。
java規範總結