你注意到 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 等還有許多其他提示和技巧可用。但我現在將縮短這一點。

可能會在一周內發布關於這個的新教程。 敬請關注。

您想在本教程中添加任何內容或發現問題,請加入並提供您的意見。