1.概述:
-
1.1.Java语言使用引用操纵对象
-
1.2.引用可以单独存在,比如我可以定义一个字符串tmp
String tmp;
-
1.3.所以一个引用可能没有指向任何一个对象,也就是没有指向任何内存地址,当我们在程序中使用这种引用调用我们预期的那个对象的属性或方法时,就会抛出空指针异常
-
1.4.空指针异常这个名字就已经可以解释这个概念了,即引用没有指向任何内存地址
2.情景:
-
2.1.在通过对象点儿使用属性或方法之前,先保证这个对象不是null
正面示例代码:
private void test(List<Map<String, Object>> list) { if (list != null && !list.isEmpty()) { Map<String, Object> tmp = list.get(0); } }
反面示例代码:
private void test(List<Map<String, Object>> list) { // list为null时,抛出空指针异常 Map<String, Object> tmp = list.get(0); }
-
2.2.在不确定数据一定不为null的时候,用基本类型包装类进行强制数据类型转换
正面示例代码:
private void test(Map<String, Object> userInfo) { Integer height = (Integer)userInfo.get("height"); }
反面示例代码:
private void test(Map<String, Object> userInfo) { // 用户身高为null时,抛出空指针异常 int height = (int)userInfo.get("height"); }
-
2.3.用基本数据类型的包装类接收数据后,如果要进行数值比较,先保证它不为空
正面示例代码:
/** * @Description 判断是否低血压 * @Author .Mark * @Date 2018年12月26日 */ private Boolean isHypotension(Map<String, Object> bloodPressure) { // 1.解析入参,获取血压高压低压浓度 Integer highPressure = (Integer)bloodPressure.get("highPressure"); Integer lowPressure = (Integer)bloodPressure.get("lowPressure"); // 2.判断 if(highPressure != null && lowPressure != null) { if(lowPressure < 60 || highPressure < 90) { return true; } } return false; }
反面示例代码:
/** * @Description 判断是否低血压 * @Author .Mark * @Date 2018年12月26日 */ private Boolean isHypotension(Map<String, Object> bloodPressure) { // 1.解析入参,获取血压高压低压浓度 Integer highPressure = (Integer)bloodPressure.get("highPressure"); Integer lowPressure = (Integer)bloodPressure.get("lowPressure"); // 2.判断 // 当highPressure或lowPressure为null时,抛出空指针异常 if(lowPressure < 60 || highPressure < 90) { return true; } return false; }