对于NPE空指针的初步的认识
来源:2-1 如何从根源避免空指针
qq_慕莱坞4316410
2020-09-01
我觉得空指针的出现一部分是疏忽大意造成的,还有一部分我觉得的是自身对于Java语法掌握不够以及对于各种API的掌握不全导致的。虽然抛出空指针很头痛.
出现空指针对我比较深的记忆是在一个项目里面,将所有的请求状态码进行封装,在定义数据信息是通过集合在定义,因为不熟悉流程设计以及疏忽,没有对其进行初始化,当访问controller时,请求访问查询所有数据,发现无法取得响应的查询的数据信息,导致取得的Data数据是NULL的.查询很久,也不知道原因,因为没有出现报错,也是可以正常访问,但是业务逻辑不成立,直到后面发现集合没有被初始化,当初始化后,访问成功。
我觉得吧NPE很难避免,因为不确定的因素太多了,有可能在不熟悉的时候直接漏掉了定义的属性初始值,所以我现在一般看见定义数组,List,Map的时候一定要先进行初始化,不然真的很难想到就是因为没初始化导致的数据信息的访问出错,特别是项目什么都不提示,真的很是抓狂
老师,有没有简单的排查Bug的手段之类的了,感觉我的排错能力很差
1回答
-
张勤一
2020-09-01
同学你好:
首先,正如我在课程中所说的,空指针基本上都是由于疏忽造成的(也就是因为你在使用对象之前,没有做好检查)。
关于 NPE 问题,对于你疏忽的地方大概有这样的几处需要处理好:
1. 定义对象就要初始化,即使后面不用,先赋一个没有意义的值都可以
2. 从任何地方返回的对象,除非你明确的知道它不为 null,否则,你一定要做检查
3. 你自己写的代码,如果可能返回 null,一定要写好注释,不要给后人挖坑
那么,总是可能会出现空指针问题的,这也不是问题,快速的定位排查就好。凡是由于空指针抛出的异常,一定会有 NullPointerException 持续的向上抛,除非你主动捕获了,否则,根据这个异常追踪异常栈就可以了。
排错能力提升也就代表着你的业务、代码能力提升,别着急,这需要大量的时间积累、经验积累,犯的错误多了,你基本上就能够快速的定位了。
我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!
30
相似问题