NPE出现的常见原因:
1、空对象,访问空对象的方法或属性;
2、空数组,访问空数组的size()或内容;
3、基本类型,自动拆箱;如函数返回int,内部实际是Integer,如果是null时,则NPE。
4、数据库查询的结果可以是null;eg:mybatis的Emp emp = baseMapper.selectById(“0”),使用错误的查询条件。
5、级联调用容易出现NPE。eg:obj.getA().getB().getC();
6、数组不为空,但对象的某个属性为空。
解决方法:提前检查。
1、String类:
比较时,常量在前;
转换时,使用String.valueOf();
2、对象:
ObjectUtils.isEmpty(field);
对数据库的查询结果先判断是否为空。
3、数组:
CollectionUtils.isEmpty(requestlist);
4、自动拆箱
实践
1、单元测试中的对象例子;
2、检查程序中的selectById();
3、检查日志的NPE错误。