我的异常-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

}

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