今天在学习狂神smbms的时候发现控指针异常的情况
报错如下:
根据以上提示信息定位到了getRoleList方法那里。
于是接下去进行了junit测试:
private RoleDao roleDao;
public List<Role> getRoleList() {
Connection connection = null;
List<Role> roleList = new ArrayList<Role>();
try {
connection = BaseDao.getConnection();
roleList = roleDao.getRoleList(connection);
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return roleList;
}
@Test
public void test3() throws SQLException {
RoleServiceImpl r = new RoleServiceImpl();
List<Role> roleList = r.getRoleList();
for (Role role : roleList) {
System.out.println(role.toString());
}
}
发现的确报了空指针异常:
最后通过对测试debug
运行结果:
没有构造函数初始化roleDao导致的问题。
解决方法:
public class RoleServiceImpl implements RoleService {
private RoleDao roleDao;
//加上构造方法的初始化,就不会有空指针了
public RoleServiceImpl() {
this.roleDao= new RoleDaoImpl();
}
public List<Role> getRoleList() {
Connection connection = null;
List<Role> roleList = new ArrayList<Role>();
try {
connection = BaseDao.getConnection();
roleList = roleDao.getRoleList(connection);
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return roleList;
}
@Test
public void test3() throws SQLException {
RoleServiceImpl r = new RoleServiceImpl();
List<Role> roleList = r.getRoleList();
for (Role role : roleList) {
System.out.println(role.toString());
}
}
}
总结:
本次空指针报错应该按照如下方法:
- 首先根据500错误页面找到大概的报错地方。
- 其次通过对具体的方法进行junit测试(验证猜想)
- 对于该方法进行debug查询找出空指针。
有关于空指针异常有很多报错的可能,本篇记录了这一种希望能给各位一点帮助和启发,有更好的方法和策略请各位在下面留言,大家一起加油嘞!!!求大神们点歌赞,万分感谢,助力有你!!!