Java初學者容易犯的程式碼錯誤

冰湖一角發表於2019-01-24

1. 不會判斷空

空指標異常是所有Java初學者接觸最多的異常,沒有之一。原因是,你們拿到一個物件後容易不假思索的直接使用(直接給這個物件的屬性賦值,直接呼叫這個物件的方法等),不報異常才怪呢!下面是最經典的判斷空的例子:

    private boolean isEmpty(String str){
        if(str==null || "".equals(str)){
            return true;
        }
        return false;
    }

2. 在for迴圈巢狀裡呼叫底層查詢資料庫的方法

這種方式一定要避免!!因為查詢資料庫是很耗時的,而在for迴圈裡不停的查詢資料庫效能有多低可想而知,那麼怎麼替換這種方式呢?很簡單:在for迴圈外面先把符合條件的資料獲取到,存在map裡,然後在for迴圈裡面根據key獲取對應的value值。這種情況雖然多些迴圈,但是隻需要查詢一次資料庫即可。

3. 在List迴圈裡刪除元素

java.util.ConcurrentModificationException這個異常就是你在迴圈list是刪除元素造成的。List是按照下標尋找元素的,而且有大小長度,如何你刪除一個元素,list列表的大小縮小並且下標也會隨之變化,所以當你想要在一個迴圈中用下標刪除多個元素的時候,它並不會正常的生效。這個時候應該將list轉成Iterator遍歷刪除,程式碼如下:

List<String> strList = new ArrayList<>();
strList.add("one");
strList.add("two");
strList.add("three");
strList.add("four");
for(String s : strList){
    if(s.equals("two")){
        strList.remove(s);//錯誤
    }
}
Iterator<String> iter = strList.iterator();
while (iter.hasNext()) {
    String s = iter.next();
    if (s.equals("two")) {
        iter.remove();//正確
    }
}    

4. 不會重構程式碼

學習java的時候,每個人都遇到過這種情況:不同方法裡包含相同的功能程式碼塊,例如日期轉換,初學者經常會在一個方法裡實現的程式碼,如果另一個方法也要用,就採用複製貼上的方法,把相同的程式碼拷到另一個方法裡面去,這種程式碼看起來多臃腫啊,後期也很難維護。遇到這種情況應該把公共程式碼進行封裝(物件導向第一特徵),不管誰要用到這個功能,只需要呼叫公共方法即可。

5. 建立物件太多

我曾經見過一個程式設計師寫的方法裡到處都是new物件,把我嚇了一跳,這給jvm得造成多少垃圾啊!不是說不讓建立物件,這要根據業務情況而定,最起碼不要創造垃圾(不使用的物件)。

相關文章