目錄
對於獲取對象不管是多個還是單個是否都可以使用get爲前綴,後續單詞已複數結尾。(二)常量定義
關於 hashCode 和 equals 的處理,遵循如下規則: (疑惑)
Collections 類返回的對象,如:emptyList()/singletonList()等都是 immutablelist,不可對其進行添加或者刪除元素的操作。
使用集合轉數組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全一致、長度爲 0 的空數組。
asList 的返回對象是一個 Arrays 內部類,並沒有實現集合的修改方法。Arrays.asList 體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
SimpleDateFormat 是線程不安全的類,一般不要定義爲 static 變量,如果定義爲static,必須加鎖,或者使用 DateUtils 工具類。
一、編程規約
(一)命名風格
對於獲取對象不管是多個還是單個是否都可以使用get爲前綴,後續單詞已複數結尾。
(二)常量定義
常量類全部保存到constant目錄下,如果是跨應用共享常量需要放置到二方庫中,通常是client.jar中的constant目錄下。
(三)代碼格式
(參考wiki)
(四)空格格式
在等號兩邊第一個都是空格
int second = (int)first + 2;
method(args1, args2, args3);
(五) OOP 規約
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");
BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);
雙進度浮點數double使用bigDecimal類
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
關於 hashCode 和 equals 的處理,遵循如下規則: (疑惑)
ArrayList 的 subList 結果不可強轉成 ArrayList,否則會拋出 ClassCastException 異常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。
使用 Map 的方法 keySet()/values()/entrySet()返回集合對象時,不可以對其進行添加元素操作,否則會拋出 UnsupportedOperationException 異常。(如果要進行操作的話就需要使用對象鎖)
Collections 類返回的對象,如:emptyList()/singletonList()等都是 immutablelist,不可對其進行添加或者刪除元素的操作。
使用集合轉數組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全一致、長度爲 0 的空數組。
使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。
asList 的返回對象是一個 Arrays 內部類,並沒有實現集合的修改方法。Arrays.asList 體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
List<String> list1 = new ArrayList<>(Arrays.asList("qqq", "www", "eee"));
list1.add("aaa1");
list1.forEach(str -> System.out.println(str));
2)Arrays.asList()這個方法,最好不要用於數組轉list。一般適用於初始化一個定長list,並賦值。
(六) 併發處理
SimpleDateFormat 是線程不安全的類,一般不要定義爲 static 變量,如果定義爲static,必須加鎖,或者使用 DateUtils 工具類。
private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
說明:如果是 JDK8 的應用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat,官方給出的解釋:simple beautiful strong immutable thread-safe。
必須回收自定義的 ThreadLocal 變量,尤其在線程池場景下,線程經常會被複用,如果不清理自定義的 ThreadLocal 變量,可能會影響後續業務邏輯和造成內存泄露等問題。 儘量在代理中使用 try-finally 塊進行回收。
解釋:如果threadLocal使用在全局的情況下的話通過static定義就不需要考慮回收。
objectThreadLocal.set(userInfo);
try {
// ...
} finally {
objectThreadLocal.remove();
}
(七) 控制語句
在高併發場景中,避免使用”等於”判斷作爲中斷或退出的條件。(疑惑)
說明:如果併發控制沒有處理好,容易產生等值判斷被“擊穿”的情況,使用大於或小於的區間判斷條件
(八) 註釋規約
(九) 其它
二、異常日誌
(一) 異常處理
持續更新。。。。