在实际项目当中我们可能会出现以下几个问题:
- 明明代码可以跑通,但是总是出现业务上的bug
- 即使业务上没有出现异常,但是代码执行的过程中总是抛出一些异常
那么在这种情况下该如何减少这种情况的发生呢,其实很简单,就是每次代码写完后重新检查两次代码:
- 第一次检查代码的业务逻辑是否正确
- 第二次在脑中模拟一遍代码的执行过程,看看是否能够正确走完流程,假如有以下代码段:
-
Map<String,Integer> rewardInfo = new HashMap<>(); Integer numberOfInvitations = rewardInfo.get("numberOfInvitations") - 1;
这段代码很简单,很多人一看就知道这里的rewardInfo.get("numberOfInvitations") - 1 会如果rewardInfo.get("numberOfInvitations") 为null 会抛出空指针异常,但是为了方便理解我们就用这段代码作为例子,来分析一下这段代码,首先进入程序会执行以下代码:
-
Map<String,Integer> rewardInfo = new HashMap<>();
而这里只是new 一个对象而已,也就确认了这一行代码不会报错,也就是在执行的过程中不会出现异常,然后继续执行会执行下面这段代码:
-
Integer numberOfInvitations = rewardInfo.get("numberOfInvitations") - 1;
但是上面这段代码的执行却分为几个步骤:
-
首先先执行rewardInfo.get("numberOfInvitations")来获取key 为numberOfInvitations的value, 这里只是value 的获取而我们都知道,value的获取是不会出错的即使Map 集合中没有这个key 和value,所y也不会抛异常,但是返回的结果一定为null,因为这里的是value 类型为 Integer
-
然后通过这里获取的value的值进行减一运算,但是由于Map 中不存在这个值,而value 的类型又为Integer,所以返回了null,此时执行null 减 1 会发现会抛出空指针异常
-
-
通过上面这种方式我们就可以找到在写代码的过程中隐藏的bug,从而在测试之前做出及时的处理,减少bug 出现的机率,同样确定业务上导致的异常情况也可以以同样的方式进行确认