如何在 Java 中处理 NullPointerException 水深无声 2023-09-25 13:03 24阅读 0赞 如果您花了一些时间在 Java 中开发程序,那么在某些时候您肯定会看到以下异常: java.lang.NullPointerException 由于`NullPointerException`原因,出现了一些主要的生产问题。在本文中,我们将介绍一些在 Java 中处理`NullPointerException`的方法。 ### **简单空检查** ### 请考虑以下代码段: public static void main(String args[]) { String input1 = null; simpleNullCheck(input1); } private static void simpleNullCheck(String str1) { System.out.println(str1.length()); } 如果按原样运行此代码,将出现以下异常: Exception in thread "main" java.lang.NullPointerException 您收到此错误的原因是因为我们正在尝试对`str1`执行`length()`操作,`str1`是`null`。 一个简单的解决方法是对`str1`添加空检查,如下所示: private static void simpleNullCheck(String str1) { if (str1 != null) { System.out.println(str1.length()); } } 这将确保在`str1是` `null` 时不会在其上运行`length()`函数。 但您可能有以下问题。 #### **如果str1是一个重要的变量呢?** #### 在这种情况下,您可以尝试如下操作: private static void simpleNullCheck(String str1) { if (str1 != null) { System.out.println(str1.length()); } else { // Perform an alternate action when str1 is null // Print a message saying that this particular field is null and hence the program has to stop and cannot continue further. } } 这个想法是,当你期望一个值可能为`null`时,最好对该变量进行`null`检查。如果结果确实是`null`值,请采取替代措施。 这不仅适用于字符串,也适用于 Java 中的任何其他对象。 ### Lombok**空检查** ### 现在以以下示例为例: public static void main(String args[]) { String input2 = "test"; List<String> inputList = null; lombokNullCheck(input2, inputList, input2); } public static void lombokNullCheck(String str1, List<String> strList, String str2) { System.out.println(str1.length() + strList.size() + str2.length()); } 这里我们有一个接受三个参数的函数:`str1`,`strList`和`str2`。 如果这些值中的任何一个被证明是`null`,我们根本不想执行这个函数中的逻辑。 #### **您如何实现这一目标?** #### 这就是龙目岛派上用场的地方。为了在代码中添加龙目岛库,请包含以下 Maven 依赖项: <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> 要了解有关Maven的更多信息,请查看[本文][Link 1]。 以下是龙目岛检查`null`的代码: public static void main(String args[]) { String input2 = "test"; List<String> inputList = null; try { lombokNullCheck(input2, inputList, input2); } catch (NullPointerException e) { System.out.println(e); } } public static void lombokNullCheck(@NonNull String str1, @NonNull List<String> strList, @NonNull String str2) { System.out.println(str1.length() + strList.size() + str2.length()); } 在函数的每个参数之前,我们添加`@NonNull`注释。 同样,当我们调用这个函数时,我们在函数调用周围放置一个`try-catch`块来捕获`NullPointerException`。 如果函数中给出的任何参数被证明是`null`,则该函数将抛出`NullPointerException`。然后,这将被`try-catch`块捕获。 这确保了,如果任何函数参数被证明是`null`,那么函数中的逻辑就不会被执行,我们知道代码不会异常。 这也可以通过一堆`null`检查语句来完成。但是使用 Lombok 可以帮助我们避免编写一堆`null`检查语句,并使代码看起来更干净。 ### **列表和空值** ### 假设您有一个列表,并且想要打印列表中的所有元素: List<String> stringList = new ArrayList<>(); stringList.add("ele1"); stringList.add("ele2"); if (stringList != null) { for (String element : stringList) System.out.println(element); } 在循环访问列表之前,我们需要在列表上进行`null检查`。 如果`null`检查不存在,则尝试循环 `null`将抛出 `NullPointerException`。 ### 映射**和空值** ### 让我们以需要访问映射中特定键的值的场景为例: Map<String, String> testMap = new HashMap<>(); testMap.put("first_key", "first_val"); if (testMap != null && testMap.containsKey("first_key")) { System.out.println(testMap.get("first_key")); } 首先,我们需要对 map 对象本身进行空检查。如果不这样做,并且地图是`null`,那么抛出`NullPointerException`。这是使用`testMap!=null` 完成此操作后,在访问特定密钥之前检查是否存在该密钥。您可以使用`testMap.containsKey("first_key")`命令检查密钥是否存在。如果未执行此操作并且缺少特定键,则将获得值 `null`。 ### **是否有必要始终添加空检查?** ### 如果您确定特定变量永远不可能`null`,那么您可以避免添加`null`检查。这可能适用于私有函数,您可以在其中控制进入函数的数据。 但是,如果您不确定对象的可空性,最好添加`null`检查。 ### **源码下载** ### 本文中讨论的所有代码都可以[在此 Github 存储库中找到][Github]。 ### **恭喜?** ### 你现在知道在Java中是如何处理`NullPointerException`了! [Link 1]: https://adityasridhar.com/posts/how-to-get-started-with-maven [Github]: https://github.com/aditya-sridhar/java-handling-nulls-example
相关 如何在Java中避免NPE(NullPointerException)? 在Java中,避免NPE(NullPointerException)主要需要对null值进行检查。以下是几种常见的避免NPE的方法: 1. **使用条件语句**: `` 傷城~/ 2024年09月17日 11:21/ 0 赞/ 2 阅读
相关 在Android开发中,如何处理NullPointerException? 在Android开发中,NullPointerException(空指针异常)通常是由于试图访问一个null对象的属性或方法引起的。 以下是一些处理NullPointerEx 傷城~/ 2024年09月11日 21:12/ 0 赞/ 9 阅读
相关 在Java中,如何避免NPE(NullPointerException)? 在Java中,避免NPE(NullPointerException)通常有以下几种方法: 1. **空对象引用检查**:在使用对象之前,先进行null判断。例如: ```j Bertha 。/ 2024年09月05日 18:45/ 0 赞/ 13 阅读
相关 如何在Java中处理JSON数据? 在Java中处理JSON数据,主要需要以下几个步骤: 1. **引入库**:首先你需要在你的项目中添加一个JSON处理的库。常用的有Google的Gson库,Apache的J 喜欢ヅ旅行/ 2024年09月05日 14:42/ 0 赞/ 15 阅读
相关 如何在Java中处理异常? 在Java中,处理异常是编程的一部分。以下是一些基本的步骤: 1. **捕获异常**:使用`try-catch`结构来捕获可能发生的异常。例如: ```java try { 落日映苍穹つ/ 2024年09月04日 12:30/ 0 赞/ 36 阅读
相关 如何在Java中处理异常? 在Java中,处理异常是编程过程中的一个重要环节。以下是一些基本的步骤: 1. **声明可能抛出异常的方法**:在方法签名前使用`throws`关键字来声明可能抛出的异常。 刺骨的言语ヽ痛彻心扉/ 2024年09月04日 11:51/ 0 赞/ 26 阅读
相关 如何在Java中处理异常? 在Java中,异常处理是通过try-catch-finally结构来实现的。以下是基本步骤: 1. **尝试(Try)**:这是异常处理的主要部分,你将可能会遇到异常的代码块 - 日理万妓/ 2024年09月04日 07:51/ 0 赞/ 15 阅读
相关 如何在Java中处理异常? 在Java中,异常处理是通过try-catch-finally语句块来实现的。以下是一个基本的流程: 1. **定义可能抛出异常的代码**:将可能会出现错误或者无法预期结果的 ╰+攻爆jí腚メ/ 2024年09月04日 06:36/ 0 赞/ 23 阅读
相关 如何在 Java 中处理 NullPointerException 如果您花了一些时间在 Java 中开发程序,那么在某些时候您肯定会看到以下异常: java.lang.NullPointerException 由于`NullPoi 水深无声/ 2023年09月25日 13:03/ 0 赞/ 25 阅读
还没有评论,来说两句吧...