1. 程式人生 > >Java 語言最容易出現常見錯誤

Java 語言最容易出現常見錯誤

好記憶不如爛筆頭,能夠記錄點什麼,就趕緊記錄點 , 方便知識的積累 ! 


1. 使用"=="判斷兩個字串相等;


    在判斷兩個字串的時候,不要使用"=="判斷兩個字串相等.


2. 在foreach中改變list的結構;


    不能在foreach中去remove/add list的結構;


3. 凌亂列印日誌的規範性;


    日誌是定位問題時最重要的依據,業務流程中缺少必要的日誌會給定位問題帶來很多麻煩,甚至可能造成問題完全無法定位。
異常產生後,必須在日誌中以ERROR或以上級別記錄異常棧,否則會導致異常棧丟失,無法確認異常產生的位置。並不需要在每次捕獲異常時都記錄異常日誌,這樣可能導致異常被多次重複記錄,影響問題的定位。但異常發生後其異常棧必須至少被記錄一次。和註釋一樣,日誌也不是越多越好。無用的冗餘日誌不但不能幫助定位問題,還會干擾問題的定位。而錯誤的日誌更是會誤導問題,必須杜絕。

 

4. 程式碼中使用魔鬼數字;


    在程式碼中使用魔鬼數字(沒有具體含義的數字、字串等)將會導致程式碼難以理解,應該將數字定義為名稱有意義的常量。
將數字定義為常量的最終目的是為了使程式碼更容易理解,所以並不是只要將數字定義為常量就不是魔鬼數字了。如果常量的名稱沒有意義,無法幫助理解程式碼,同樣是一種魔鬼數字。
在個別特殊情況下,將數字定義為常量反而會導致程式碼更難以理解,此時就不應該強求將數字定義為常量

 

5. 空指標異常為處理;


    空指標異常是編碼過程中最常見的異常,在使用一個物件的時候,如果物件可能為空,並且使用次物件可能會造成空指標異常,那麼需要先判斷物件是否為空,再使用這個物件。
在進行常量和變數的相等判斷時,建議將常量定義為Java物件封裝型別(如將int型別的常量定義為Integer型別),這樣在比較時可以將常量放在左邊,呼叫equals方法進行比較,可以省去不必要的判空。

 

6. 資料的下標越界;


    訪問陣列、List等容器內的元素時,必須首先檢查下標是否越界,杜絕下標越界異常的發生


    
7. 字串轉數字異常;


    呼叫Java方法將字串轉換為數字時,如果字串的格式非***丟擲執行時異常NumberFormatException


    
8. 資源釋放操作; 


    在使用檔案、IO流、資料庫連線等不會自動釋放的資源時,應該在使用完畢後馬上將其關閉。關閉資源的程式碼應該在try...catch...finally的finally內執行,否則可能造成資源無法釋放。


    
9. 迴圈體的效能考量;


    在迴圈體內重複使用且不會變化的資源(如變數、檔案物件、資料庫連線等),應該在迴圈體開始前構造並初始化,避免在迴圈體內重複和構造初始化造成CPU資源的浪費。
除非業務場景需要,避免在迴圈體內構造try...catch塊,因為每次進入、退出try...catch塊都會消耗一定的CPU資源,將try...catch塊放在迴圈體之外可以節省大量的執行時間。

 

10. 資料過載的toString()方法;


    資料類如果沒有過載toString()方法,在記錄日誌的時候會無法記錄資料物件的屬性值,給定位問題帶來困難。
 

11.不變資源使用static修飾或者啟動系統時放入記憶體, 而不是在使用時候再去獲取.

 

12. 系統配置檔案,第一次載入完成之後,放入記憶體中,再次獲取時候,在記憶體中去,不去讀檔案。

 

後期收集的時候,再會放入新的常見錯誤.