在序列化類中不使用構造函數爲final變量賦值java
手動替換class文件不可取(靜態變量修改後需編譯後纔會修改)數組
用偶數判斷不用奇數判斷緩存
重要的數字入參須要判斷邊界ide
BigDecimal 使用String構造參數爲最優選擇函數
包裝類型使用euqals方法比較是不是相等 或者用轉化爲基本類型比較(大小會根據相關的方法比較)工具
包裝類都是採用valueOf()方法轉換的 其中-128-127都是從緩存從取的不會再堆上產生新的對象。性能
(java9 廢除包裝類相關基本類型的構造器,改用靜態方法ValueOf替代)優化
通常狀況最好不要重寫父類靜態方法(固然若是你能區分代表類型和實際類型,你能夠試試)。Idea IDE中你須要手動重寫this
@Override 註解也沒法做用在靜態方法上的。spa
不使用實例訪問靜態方法,這是代碼的壞味道。仍是用類名訪問吧。
構造函數儘可能簡單。這裏的簡單的意思是不要在其中作複雜的初始化代碼。(調用其餘方法或者其餘類的構造器、爲final變量賦值等)
在面嚮對象語言中,除非很是瞭解類的執行過程,不然仍是嘗試簡潔明瞭的方式構建代碼結構。
靜態代碼塊會再構造函數內首先執行(若是構造函數中有this和super這兩個關鍵字,
靜態代碼塊是不會插入到這個構造函數前執行的,確保每一個構造函數只執行一次靜態代碼塊)。做用通常爲實例化變量和實例化環境。
內部類實現多繼承
避免淺拷貝
工具類最好使用final來避免繼承 構造器私有化
儘量的使用局部變量
中文排序Collator類
基本類型優先使用
集合初始化的時候很是有必要聲明容量
最值計算時使用集合最簡單,使用數組性能最優
Arrays 只使用只讀列表操做
不一樣的集合採用不一樣的遍歷方法。隨機訪問 無序存儲的使用fori 有序的使用foreach 或者迭代器
列表相等(equals) 只關心數據元素
subList方法生成子列表時,原始列表保持只讀狀態
利用好集合replaceAll 等方法能優雅實現集合的去重(注意集合的淺拷貝)
switch case 判斷值是否爲空
枚舉使用的valueOf時候前 校驗時候存在該種枚舉的值
枚舉最好使用工廠方式
反射效率低是個真命題,但所以而不使用它就是個假命題
final塊中不要出現return 語句
構造函數裏不要拋出異常
異常只爲異常服務,不能用來做爲正常的主邏輯(除非真的沒法避免)
try catch 雖然性能比較慢 可是不能作爲拒絕異常的理由
線程的優先級推薦使用MIN_PRIORITY(1) NORM_PRIORITY(5) MAX_PRIORITY(10) 級別 不建議使用其餘的7個數字
Optional能夠避免空指針異常和減小if else邏輯 不可直接調用ifParent()
// 1.傳統if-else
if (person != null) {
if (person.getCar() != null) {
if (person.getCar().getInsurance() != null) {
insurance = person.getCar().getInsurance().getName();
}
}
}
// 2.optional 優化寫法
String unknown =
Optional.ofNullable(person)
.map(Person::getCar)
.map(Car::getInsurance)
.map(Insurance::getName)
.orElse("Unknown");
複製代碼