[Crash分析] java.lang.NullPointerException
来源:互联网 发布:2013日本进出口数据 编辑:程序博客网 时间:2024/06/11 18:51
【类型定位】
java.lang.NullPointerException这种类型crash对应着最常见的空指针引用错误。一般我们在调用对象的方法前都会去检查一下对象是否为空,如果为空就不能进行调用方法的操作。很多同学会有这样的感觉:我平常用对象都会先判空,不会出现这样的低级错误。开始我也是这样认为的,怎么可能会在空指针这样的问题上犯错误呢,后来在项目上线上收集的crash分析来看,就的的确确存在这样的空指针调用引起的crash,而且这部分crash的还不在少数。
一般显示调用对象方法前,我都会先进行一下判空操作。可是对于隐式调用,就可能存在上面提出的这类crash。在项目中,我们遇到的crash也是这类隐式的crash.
【解决方案】
增加指针的判空操作,只有在非空情况下才会进行相关操作。需要着重注意对象的隐式方法调用。
【代码展示】
public class MainActivity extends AppCompatActivity { private List<String> datas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); traverseList(); } void traverseList() { for (String str: datas) { // do something Log.d("MainActivity", str); } }}
上面的代码中traverseList遍历list中的所有元素就存在这种crash的风险,因为这种调用方法明面上看不存在对象的调用,但实际调用了datas.size进行遍历。而如果此时data对象为空,就会产生本文所提到的crash。解决此类crash的方法也很简单,在隐式调用前添加判空处理
void traverseList() { if (datas != null) { for (String str: datas) { // do something Log.d("MainActivity", str); } } }
【个人总结】
- java.lang.NullPointerException对应着空指针调用crash
- 这种crash一定要注意一些容器的for循环遍历,首先保证数据对象非空再进行遍历
0 0
- [Crash分析] java.lang.NullPointerException
- java.lang.NullPointerException的分析
- java.lang.NullPointerException翻译
- java.lang.NullPointerException
- java.lang.NullPointerException
- Java.lang.NullPointerException
- java.lang.NullPointerException
- m2eclipse java.lang.NullPointerException
- java.lang.NullPointerException
- Android(java.lang.NullPointerException)
- java.lang.NullPointerException
- java.lang.NullPointerException
- java.lang.NullPointerException
- java.lang.NullPointerException
- 十一、java.lang.NullPointerException
- Java.lang.NullPointerException
- java.lang.NullPointerException
- java.lang.NullPointerException
- 怎么吸引蜘蛛
- 【Bash百宝箱】shell内建命令之eval、exec、exit、export
- 现今的农村教育令人刮目相看
- opencv计算两个轮廓之间hu矩相似程度,MatchShapes
- hdu 5900 QSC and Master【区间dp】
- [Crash分析] java.lang.NullPointerException
- HDU 5901 Count primes (求1e11内素数个数、模板题....)
- Redis 入门之 数据类型
- mysql面试题以及答案包括优化
- 51nod 1073 约瑟夫环
- 手机软件的测试主要有哪些方面去测试
- 关闭是否只查看安全传送的网页内容提示框 和 是否允许运行软件,如ActiveX控件和插件提示框
- 对面向对象的理解
- 【HDU 5890】Eighty seven(bitset+DP+优化)