如何編寫高效代碼?這是每一個研發團隊都面臨的一個重大問題。《阿里Java高效代碼50例》(實際54例)來源於實際經驗,幫助咱們成爲編寫高效代碼的軟件工程師。
正則表達式
類別數組 |
要點安全 |
常量&變量多線程 |
直接賦值常量值,禁止聲明新對象ide |
當成員變量值無需改變時,儘可能定義爲靜態常量函數 |
|
儘可能使用基本數據類型,避免自動裝箱和拆箱ui |
|
若是變量的初值會被覆蓋,就沒有必要給變量賦初值spa |
|
儘可能使用函數內的基本類型臨時變量線程 |
|
儘可能不要在循環體外定義變量設計 |
|
不可變的靜態常量,儘可能使用非線程安全類 |
|
不可變的成員變量,儘可能使用非線程安全類 |
|
對象&類 |
禁止使用JSON轉化對象 |
儘可能不使用反射賦值對象 |
|
採用Lambda表達式替換內部匿名類 |
|
儘可能避免定義沒必要要的子類 |
|
儘可能指定類的final修飾符 |
|
方法 |
把跟類成員變量無關的方法聲明成靜態方法 |
儘可能使用基本數據類型做爲方法參數類型,避免沒必要要的裝箱、拆箱和空指針判斷 |
|
儘可能使用基本數據類型做爲方法返回值類型,避免沒必要要的裝箱、拆箱和空指針判斷 |
|
協議方法參數值非空,避免沒必要要的空指針判斷 |
|
協議方法返回值非空,避免沒必要要的空指針判斷 |
|
被調用方法已支持判空處理,調用方法無需再進行判空處理 |
|
儘可能避免沒必要要的函數封裝 |
|
儘可能指定方法的final修飾符 |
|
表達式 |
儘可能減小方法的重複調用 |
儘可能避免沒必要要的方法調用 |
|
儘可能使用移位來代替正整數乘除 |
|
提取公共表達式,避免重複計算 |
|
儘可能不在條件表達式中用!取反 |
|
對於多常量選擇分支,儘可能使用switch語句而不是if-else語句 |
|
字符串 |
儘可能不要使用正則表達式匹配 |
儘可能使用字符替換字符串 |
|
儘可能使用StringBuilder進行字符串拼接 |
|
不要使用""+轉化字符串 |
|
數組 |
不要使用循環拷貝數組,儘可能使用System.arraycopy拷貝數組 |
集合轉化爲類型T數組時,儘可能傳入空數組T[0] |
|
集合轉化爲Object數組時,儘可能使用toArray()方法 |
|
集合 |
初始化集合時,儘可能指定集合大小 |
不要使用循環拷貝集合,儘可能使用JDK提供的方法拷貝集合 |
|
儘可能使用Arrays.asList轉化數組爲列表 |
|
直接迭代須要使用的集合 |
|
不要使用size方法檢測空,必須使用isEmpty方法檢測空 |
|
非隨機訪問的List,儘可能使用迭代代替隨機訪問 |
|
儘可能使用HashSet判斷值存在 |
|
避免先判斷存在再進行獲取 |
|
異常 |
直接捕獲對應的異常 |
儘可能避免在循環中捕獲異常 |
|
禁止使用異常控制業務流程 |
|
緩衝區 |
初始化時儘可能指定緩衝區大小 |
儘可能重複使用同一緩衝區 |
|
儘可能設計使用同一緩衝區 |
|
儘可能使用緩衝流減小IO操做 |
|
線程 |
在單線程中,儘可能使用非線程安全類 |
在多線程中,儘可能使用線程安全類 |
|
儘可能減小同步代碼塊範圍 |
|
儘可能合併爲同一同步代碼塊 |
|
儘可能使用線程池減小線程開銷 |
示例代碼,詳見原文:http://www.javashuo.com/article/p-zlvqawyo-bm.html