Java代碼建議

  • 在序列化類中不使用構造函數爲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");
      複製代碼
相關文章
相關標籤/搜索