java.lang.NullPointerException 空指针异常之一:对象真的为空吗?

版权声明:本文为博主原创文章,转载表明出处即可,欢迎转载! https://blog.csdn.net/qq_39767955/article/details/82226277

    在开发中,需要传入页面表单作为查询条件,在DAO层进行数据库的select操作,如果form为空,那么查询所有的数据出来,如果form不为空,那么查询满足form条件的数据。我们把这个开发需求形象化一点:一个学生登录教务处查看自己的成绩,刚登录成绩查询页面的时候,什么参数都没有(form没有值),看到的是他所有的成绩;当他在课程名称,课程所在学期(年),授课老师名字等输入框输入正常的数据后,点击查询按钮(form有值了),查看到的是满足form条件的数据。

    好了,需求描述完了,我在写DAO的sql语句时,模仿着公司其他人的代码写的,除了数据库语句不一样外,其他所有都一样,可是在跑的时候,我的就报了java.lang.NullPointerException异常,搞了很久没有搞定,问了一下大佬,大佬说我的form对象为空,我说你的(方法里的参数)form在第一次跳转页面的时候也没有值呀(就像我们登录成绩查询页面时看到的是我们全部的成绩),他让我再仔细看看两个form有什么不同,我才发现了区别,我把它们贴出来:

         

这个是正确的form,它为空(null)吗?它不为空,为空的是它的属性。我们再来看看我方法里面的form:

看到区别没有,我的form是直接=null,这才是导致空指针的原因:我在添加查询参数,即form.getXXX()参数时,编译检查时会通过,但在运行时,form都为空了,哪来的.getXXX()方法呢,所以报了空指针异常。

我们再往深处探究这两个form的不同:正确的form有类型,有地址(JVM分配了空间),有参数,参数为NULL,人家是完整的对象;而错误的form在JVM是不存在的, 是找不到的,也就是堆栈内存没有地址引用的,这才是它们之间最本质的区别。

猜你喜欢

转载自blog.csdn.net/qq_39767955/article/details/82226277