更新時間:2022-11-15 10:50:52 來源:動力節點 瀏覽1380次
NullPointerException是一個 RuntimeException。在Java中,可以將特殊的空值分配給對象引用。當程序嘗試使用具有空值的對象引用時拋出 NullPointerException。
這些可以是:
從空對象調用方法。
訪問或修改空對象的字段。
取null的長度,就好像是一個數組一樣。
訪問或修改空對象的槽,就像它是一個數組一樣。
拋出 null,就好像它是一個 Throwable 值一樣。
當您嘗試通過空對象進行同步時。
Null 是 Java 中使用的特殊值。主要用于表示沒有給引用變量賦值。null 的一種應用是實現鏈表和樹等數據結構。其他應用程序包括 Null Object 模式和Singleton 模式。單例模式確保只創建一個類的一個實例,并且旨在提供對對象的全局訪問點。
最多創建一個類的一個實例的示例方法是將其所有構造函數聲明為私有的,然后創建一個返回該類的唯一實例的公共方法:
// To use randomUUID function.
import java.util.UUID;
import java.io.*;
class Singleton
{
// Initializing values of single and ID to null.
private static Singleton single = null;
private String ID = null;
private Singleton()
{
/* Make it private, in order to prevent the
creation of new instances of the Singleton
class. */
// Create a random ID
ID = UUID.randomUUID().toString();
}
public static Singleton getInstance()
{
if (single == null)
single = new Singleton();
return single;
}
public String getID()
{
return this.ID;
}
}
// Driver Code
public class TestSingleton
{
public static void main(String[] args)
{
Singleton s = Singleton.getInstance();
System.out.println(s.getID());
}
}
輸出:
10099197-8c2d-4638-9371-e88c820a9af2
在上面的示例中,單例類的靜態實例。該實例最多在 Singleton getInstance 方法中初始化一次。
為避免 NullPointerException,我們必須確保在使用它們之前正確初始化所有對象。當我們聲明一個引用變量時,在我們從對象請求方法或字段之前,我們必須驗證對象不為空。
以下是克服該問題的解決方案的常見問題。
案例 1:字符串與文字的比較
一個非常常見的案例問題涉及字符串變量和文字之間的比較。文字可以是字符串或枚舉的元素。不要從空對象調用方法,考慮從字面量調用它。
// A Java program to demonstrate that invoking a method
// on null causes NullPointerException
import java.io.*;
class GFG
{
public static void main (String[] args)
{
// Initializing String variable with null value
String ptr = null;
// Checking if ptr.equals null or works fine.
try
{
// This line of code throws NullPointerException
// because ptr is null
if (ptr.equals("gfg"))
System.out.print("Same");
else
System.out.print("Not Same");
}
catch(NullPointerException e)
{
System.out.print("NullPointerException Caught");
}
}
}
輸出:
捕獲空指針異常
我們可以通過對文字而不是對象調用 equals 來避免 NullPointerException。
// A Java program to demonstrate that we can avoid
// NullPointerException
import java.io.*;
class GFG
{
public static void main (String[] args)
{
// Initializing String variable with null value
String ptr = null;
// Checking if ptr is null using try catch.
try
{
if ("gfg".equals(ptr))
System.out.print("Same");
else
System.out.print("Not Same");
}
catch(NullPointerException e)
{
System.out.print("Caught NullPointerException");
}
}
}
輸出:
不一樣
案例 2:檢查方法的參數
在執行新方法的主體之前,我們應該首先檢查其參數是否為空值,然后只有在正確檢查參數后才繼續執行該方法。否則,它將拋出IllegalArgumentException并通知調用方法傳遞的參數有問題。
// A Java program to demonstrate that we should
// check if parameters are null or not before
// using them.
import java.io.*;
class GFG
{
public static void main (String[] args)
{
// String s set an empty string and calling getLength()
String s = "";
try
{
System.out.println(getLength(s));
}
catch(IllegalArgumentException e)
{
System.out.println("IllegalArgumentException caught");
}
// String s set to a value and calling getLength()
s = "GeeksforGeeks";
try
{
System.out.println(getLength(s));
}
catch(IllegalArgumentException e)
{
System.out.println("IllegalArgumentException caught");
}
// Setting s as null and calling getLength()
s = null;
try
{
System.out.println(getLength(s));
}
catch(IllegalArgumentException e)
{
System.out.println("IllegalArgumentException caught");
}
}
// Function to return length of string s. It throws
// IllegalArgumentException if s is null.
public static int getLength(String s)
{
if (s == null)
throw new IllegalArgumentException("The argument cannot be null");
return s.length();
}
}
輸出:
0
13
捕獲到 IllegalArgumentException
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習