经常出现空指针异常的场景之空指针给我死

前言

作为一名Java菜鸟选手,经常因为会不会出现空指针异常而烦心。空指针带来的烦恼不必多说,轻则被喷排查代码半小时,重则奖金绩效减半,四舍五入等于今年白干。
话不多说,现在就来总结一下经常出现空指针异常的场景。
正式开始前,看看美女先。哈哈哈哈。
在这里插入图片描述

场景类型

1、数据库空数据

数据库存null值,其实还是比较容易发现的。但是安全保险,还是建议还是先确认下当前所要使用字段的含义。同时去数据库中抽样遍历下所要使用的字段。注意要,不要只关注一张表,最好涉及到的表都要看下。记住作为一名CRUD选手,也要时刻保持一个谨慎心的。

2、容器空指针

作为一名CRUD男孩你说你不适用容器,那我是不信的。直接上代码,

   //1、本身为空。
        List<String> list = null;
        //2、map本身key不存在,对于返回值没有校验,直接使用。
        Map<String,String> map = new HashMap<>();
        map.put("1","1");
        String s = map.get(2);
        // s为null,调用其方法必然空指针异常
        s.length();

建议:1、使用上层业务返回的容器时,一定要进行空指针校验。可以自己写一个Util,或者使用开源打Util包进行判断。

3、xx.valueOf()

在接口调用的过程中,会存在类型不同,需要转换的场景。最常见的是:将Long类型,转换成String类型,这时候便会调用
String.valueOf(xx);。你不保证别人传递给你的参数会不会有脏数据,即使已经约定好不能传空数据。但是一定要记住,别人的服务一定是不可靠的,可靠性要由自己来保证。自己的代码自己不负责,想当老王么。

Long temp = null;
String.valueOf(temp ==null ? "" : temp);

4、注解注入

对于Java的项目,现在基本都基于Spring的。这就避免不了使用Spring提供的IOC功能。记住,当使用注解(@Autowired等等)进行对象注入的时候,一定要先将类提供给IOC进行管理。可以通过注解方式(@Service等等)也可以使用配置文件的方式。推荐使用注解的方式,简单便于维护。

@Autowired
    private static Role role;
    public static void main(String[] args) {
        System.out.println(role.getDesc());

    }
控制台输入:
Exception in thread "main" java.lang.NullPointerException
	at com.pinfine.test.Test02.main(Test02.java:20)

总结

空指针是最让头疼的事情,你不知道什么时候会给你来个NullPointerException。上述场景只是最常见的情况,还会有很多业务场景会出现意想不到的惊喜,我会继续补充遇到空指针的场景。因此,要养成习惯coding的时候,一定要时刻提醒自己,这个对象会是null么,我要不要校验一下他呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值