当前位置: 首页 > news >正文

如何优雅的处理NPE问题?

1.什么是NPE?

NPE,即NullPointerException,是开发中最常见的问题之一,有必要知道如何正确地处理NPE。 对于 Java 开发者来说,null 是一个令人头疼的类型,一不小心就会发生 NPE (空指针) 问题。也是 Java 语言为人诟病的一个重要原因之一。在我们消除可恶的 NPE 问题之前我们要回顾一下 Java 中 null 的概念。

2.有6种情况下会出现NPE问题

在空对象上调用实例方法

public static void test4(){List list =null;int aaa=list.size();
}

访问空对象上的字段

public static void test5(){List<String> list =null;String aaa=list.get(0);
}

抛出空异常

public static void test1(){throw null;
}

空字符比较

public static void test3(){String str = "this is a test";boolean flag = str.equals("this is a test");System.out.println("===equals result====" + flag);str = null;flag = str.equals("this is a test");System.out.println("===equals result====" + flag);
}

直接return null

public static String test6(){return null;
}

 

对空对象进行同步或在同步块内使用null

public static void test2(){Object obj = null;synchronized (obj){//.....}
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/Java-demo(npe)

Note: NPE问题一定是由逻辑错误触发的,因此使一定可以通过编码解决的,对于NPE问题,要做到早暴露,早修复,严禁使用try catch掩盖编码错误。 对于程序的调用方开发方,要么是调用方对接口的调用出现了逻辑错误,要么是开发方的代码存在逻辑错误。

  1. 如果是调用方的问题,这个问题被调用方式无法解决的,属于参数校验的检验内容,通过对参数的校验,及时发现NPE问题同时提高充分的信息提示调用方修改,例如返回错误码和错误信息。
  2. 如果是开发方代码存在问题,就要修复产生NPE问题的代码。如加入判空,使用空的集合代替null。

3.如何预防好NPE问题?

  1. 对于调用equal方法判断对象相等的情景,在已知不为空的对象上调用,如对于字符串判断相等,使用字符串调用equal而不是未知对象。
  2. 对于返回字符串的情况,返回空白字符串("")而不是null。
  3. 对于返回容器类的情况,返回空容器(Collections.EMPTY_LIST)而不是null。
  4. 使用@NotNull@Nullable提示调用者所需的参数,注解本身不会检查代码,但是可以有效提示调用者,同时在使用一些静态检查框架的时候起作用,也可以再JavaDoc文档中自动标识。
  5. 在定义变量的时候赋予合适的初始值,如("")或者空的容器(Collections.EMPTY_LIST)。
  6. 使用Optional
http://www.lryc.cn/news/454271.html

相关文章:

  • k8s 中存储之 NFS 卷
  • Redis中BitMap实现签到与统计连续签到功能
  • 【Spring】“请求“ 之传递 JSON 数据
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • Redis-预热雪崩击穿穿透
  • jvisualvm学习
  • Gazebo环境下开源UAV与USV联合仿真平台
  • Linux进程调度和进程切换
  • 机器学习基本上就是特征工程——《特征工程训练营》
  • Android Framework AMS(01)AMS启动及相关初始化1-4
  • 基于基于微信小程序的社区订餐系统
  • [单master节点k8s部署]29.Istio流量管理(五)
  • Something for 24OI
  • 【React】事件机制
  • 华为OD的职级与薪资
  • 【HTML5】html5开篇基础(4)
  • HTTP【网络】
  • MQ延迟消息:原理、实现与应用
  • 计算机网络—大端序和小端序
  • 《OpenCV 计算机视觉》—— Harris角点检测、SIFT特征检测
  • rtmp协议转websocketflv的去队列积压
  • Elasticsearch实战应用:构建高效搜索引擎
  • Hive数仓操作(四)
  • 《C++跨平台开发:突破界限,释放无限可能》
  • 速盾:免备案服务器?
  • Electron获取nodejs和chrome版本信息
  • 【React】setState 批量更新
  • 微信小程序开发日记第二天
  • 如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
  • Top4免费音频剪辑软件大比拼,2024年你选哪一款?