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得造成多少垃圾啊!不是說不讓創建對象,這要根據業務情況而定,最起碼不要創造垃圾(不使用的對象)。