你注意到 java.lang.NullPointerException (NPE) 了吗? 在 Java 中避免运行时 NPE 的 8 个最佳实践

已发表: 2020-10-07
你注意到 java.lang.NullPointerException (NPE) 了吗?在 Java 中避免运行时 NPE 的 8 个最佳实践

避免 Java 中的 Null 指针异常和 Java 提示和最佳实践以避免 Java 中的 NullPointerException。

作为一名 Java 开发人员,我相信您从第一天开始一定遇到过空指针异常 (NPE)。 在大多数情况下,NPE 异常会显示清晰的堆栈跟踪,它指出了相同的根本原因,但在大型企业级应用程序的情况下,您有数百个类,找出真正的根本原因就变成了噩梦。

什么是空指针异常 (NPE)?

NullPointerException (NPE)是当您尝试使用指向内存中任何位置 (null) 的引用时发生的异常,就好像它正在引用一个对象一样。

null引用上调用方法或尝试访问空引用的字段将触发 NPE。 这是最常见的原因。

根据 JavaDoc,以下是 NPE 的主要原因:

  • null当作一个Throwable值来抛出。
  • 调用null对象的实例方法。
  • 访问或修改null对象的字段。
  • null的长度视为一个数组。
  • 访问或修改null的槽,就像它是一个数组一样。

现在真正的问题是如何在运行时避免 java.lang.NullPointerException? 在本教程中,我们将看一些在运行时创建 NPE 的示例以及我们需要执行的步骤来解决这个问题。

让我们在运行时创建 NPE 1。 看看下面的例子CrunchifyNullPointerExceptionTips.java

我们将以 3 种不同的方式创建 NPE

  1. 如果您尝试访问 null 对象,将抛出 NPE
  2. 如果您尝试转换空字符串,将抛出 NPE
  3. 如果您在类初始化期间尝试访问 null 对象,将抛出 NPE

创建类 CrunchifyNullPointerExceptionTips.java

结果:

好吧,我们可以使用一些技巧和窍门来避免在运行时出现 NullPointerException。 让我们来看看。

提示1:

Eclipse / IntelliJ IDE 将尝试在工作区中显示 NPE。 仅在开发期间更正您的代码。

Eclipse 中的空指针提示

提示2:

在对对象进行操作之前添加crunchifyI sNullorEmpty ()检查。 将此添加到CrunchifyNullPointerExceptionTips.java

在上面的 java 程序中,第 55 行和第 56 行将被替换为这个。

提示 3:

在 trim() 操作后检查 String 是否为null

提示4:

始终使用Try Catch block以防止不间断的运行时进程。

提示 5:

Collections.emptyList()是首选,因为可以更好地处理泛型。

提示 6:

使用Java Assertions

断言是一个语句,使您能够测试您对代码的假设。 例如,如果您编写一个在系统中返回名称的方法,您可以断言如果 String 为空,则返回的 otherName。

断言的基本用法是:

但是有一个问题:断言在生产环境中不可用,我们不应该将断言与任何业务逻辑一起使用。

提示 7:

尝试使用containsKey()containsValue()contains()检查。

提示8:

总而言之,在开发过程中处理 NPE 而不是在运行时在生产环境中进行调试始终是一种好习惯。 使用 Spring Framework Annotation、 Factory Pattern 、Null Object Pattern 等还有许多其他提示和技巧可用。但我现在将缩短这一点。

可能会在一周内发布关于这个的新教程。 敬请关注。

您想在本教程中添加任何内容或发现问题,请加入并提供您的意见。