我的異常-java.lang.NullPointerException

      這個異常相信大家一定非常眼熟,相信在每人的程序開發生涯中都遇到過。在這次高校3.1的開發中,這樣的錯又這樣被拋出來了。這是一個小bug,但遇到它,它就能讓你噁心半天,因爲的程序會因此掛起,不再提供正常的服務。

      在基礎開發對外服務接口的時候,經常遇到服務異常,其他系統在調用接口的時候,時而不能正常提供數據。然後我就去jboss上去翻看server.log,發信有報java.lang.NullPointerException的錯,然後java.lang.NullPointerException計數,查到481處同樣的錯誤。


究其原因,在開發接口實現的時候,方法的返回值沒有判斷null值直接返回

看兩個比較典型方法實現

lstStudent = studentBean.queryStudentAll();

List fields = new ArrayList();

ObjectToMap otm = new ObjectToMap();
fields=  Arrays.asList(Student.class.getFields()) ;

List<Map<Serializable, Serializable>> list = otm.convertToMap(fields, lstStudent);//在使用ObjectToMap.convertToMap() 方法前沒有判斷

return list;

      以上的lstStudent在利用ObjectToMap.convertToMap()方法的時候,沒有判斷它是否爲null,就直接進行了轉換,一旦爲null值,返回值list也就爲null,便導致了該錯的出現。

public List<Map<Serializable, Serializable>> queryColleageNamesByIds(
		List<String> colleageIds, String dataBaseName) {
		
	List<Map<Serializable, Serializable>> listMapInstitution = new ArrayList<Map<Serializable, Serializable>>();
	
	List<Institution> listInstitution= new ArrayList<Institution>(); 
	
	listInstitution=institutionEao.queryByList(colleageIds, dataBaseName);
	
	if (listInstitution != null || listInstitution.size() > 0
			|| listInstitution.get(0) != null) {
		EntityToMap entityToMap = new EntityToMap();
		listMapInstitution = entityToMap.entityToMap(listInstitution);
		return listMapInstitution;
	} else {
		return null;//至少應該返回 new List<Map<Serializable, Serializable>>,這樣不至於報java.lang.NullPointerException異常

	}
		
}

      該方法的錯誤很明顯,如果查詢不到就直接乾脆返回了一個null.至少應該返回 new List<Map<Serializable, Serializable>>,這樣不至於報java.lang.NullPointerException異常.

     

翻看之前的學習記錄,發現一些對null和""的方法總結,再拿出來分享一下,希望以後不再被java.lang.NullPointerException所困擾

 

假如現在要對一個name對象,我們往往習慣了這樣寫


if (name =="") {
     //do something
}

      或者這樣寫:

if(name.equals("")) {
     //do something
}

         前者,初學者最容易犯,也最不容易被發現的錯誤,因爲它們的語法本身沒問題,Java編譯器編譯時不報錯。但這種條件可能在運行時導致程序出現bug,永遠也不會爲true,也就是時說,if塊裏的語句永遠也不會被執行。

      後者,包括很多Java熟手也很容易犯的錯誤,爲什麼是錯誤的呢?也許你會感到納悶。

對,它們的寫法本身沒錯,但是,少了一個null判斷的條件,試想,如果name=null的情況下,會發生什麼後果呢?後果是,你的程序將拋出NullPointerException異常,系統將被掛起,不再提供正常服務。

當然,如果之前已經對name作了null判斷的情況例外。

 

正確的寫法應該先加上name != null的條件,如例:

 

if(name!= null && !name.equals("")) {

     //do something

}

 

或者

 

if(!"".equals(name)&& !null.equals ) {//將""寫在前頭,這樣,不管name是否爲null,都不會出錯。

     //do something

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章