Java程式碼建議

Monster_x發表於2019-04-14
  • 在序列化類中不使用建構函式為final變數賦值

  • 手動替換class檔案不可取(靜態變數修改後需編譯後才會修改)

  • 用偶數判斷不用奇數判斷

  • 重要的數字入參需要判斷邊界

  • BigDecimal 使用String構造引數為最優選擇

  • 包裝型別使用euqals方法比較是否是相等 或者用轉化為基本型別比較(大小會根據相關的方法比較)

  • 包裝類都是採用valueOf()方法轉換的 其中-128-127都是從快取從取的不會再堆上產生新的物件。

  • (java9 廢除包裝類相關基本型別的構造器,改用靜態方法ValueOf替代)

  • 一般情況最好不要重寫父類靜態方法(當然如果你能區分表明型別和實際型別,你可以試試)。Idea IDE中你需要手動重寫

  • @Override 註解也無法作用在靜態方法上的。

  • 不使用例項訪問靜態方法,這是程式碼的壞味道。還是用類名訪問吧。

  • 建構函式儘量簡單。這裡的簡單的意思是不要在其中做複雜的初始化程式碼。(呼叫其他方法或者其他類的構造器、為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");
      複製程式碼

相關文章