这个异常相信大家一定非常眼熟,相信在每人的程序开发生涯中都遇到过。在这次高校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熟手也很容易犯的错误,为什么是错误的呢?也许你会感到纳闷。
对,它们的写法本身没错,但是,少了一个null判断的条件,试想,如果name=null的情况下,会发生什么后果呢?后果是,你的程序将抛出NullPointerException异常,系统将被挂起,不再提供正常服务。
当然,如果之前已经对name作了null判断的情况例外。
正确的写法应该先加上name != null的条件,如例:
if(name!= null && !name.equals("")) {
//do something
}
或者
if(!"".equals(name)&& !null.equals ) {//将""写在前头,这样,不管name是否为null,都不会出错。
//do something
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
我的异常-java.lang.NullPointerException
原文地址:http://blog.csdn.net/chenjinge7/article/details/47028703