[Crash分析] java.lang.NullPointerException
2016-09-19 20:35
337 查看
【类型定位】
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循环遍历,首先保证数据对象非空再进行遍历
相关文章推荐
- java.lang.NullPointerException的分析
- java.lang.NullPointerException错误的可能原因分析
- 分析java.lang.NullPointerException thrown in RelativeLayout measure()
- 分析java.lang.NullPointerException thrown in RelativeLayout measure()
- java.lang.NullPointerException错误处理方法及原因分析
- 分析java.lang.NullPointerException thrown in RelativeLayout measure()
- java.lang.NullPointerException错误分析
- java.lang.NullPointerException错误分析
- HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException
- Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.lang.NullPointerException)
- 全局变量和局部变量重复之this.name.toString());Exception in thread "main" java.lang.NullPointerException
- 访问jsp报错org.apache.jasper.JasperException: java.lang.NullPointerException的解决办法 问题描述:
- java.lang.NullPointerException: Attempt to invoke virtual method 'void com.hhl.library.FlowTagLayout
- 异常:failed for object com.sdu.crm.pojo.Customer@136a986 [java.lang.NullPointerException]
- 出现java.lang.NullPointerException此类错误
- An internal error occurred during: "Launching java.lang.NullPointerException
- 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题
- 启动 Eclipse 报错 “An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException”
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- 解决java.lang.NullPointerException: View must not be null!