Umgang mit Null-Queues
In den vorherigen Schritten haben wir mit einem ordnungsgemäß initialisierten Queue
-Objekt gearbeitet. In der Praxis der Programmierung kann es jedoch vorkommen, dass ein Verweis auf eine Queue
(oder ein beliebiges anderes Objekt) null
ist. Wenn man versucht, eine Methode auf einem null
-Objekt aufzurufen, wird eine NullPointerException
ausgelöst, was ein häufiger Laufzeitfehler in Java ist.
Es ist von entscheidender Bedeutung, potenzielle null
-Verweise zu behandeln, um diese Fehler zu vermeiden. Bevor Sie Methoden wie isEmpty()
oder size()
auf einer Queue
aufrufen, sollten Sie immer prüfen, ob der Verweis auf die Queue selbst null
ist.
Lassen Sie uns unser QueueCheck.java
-Programm noch einmal ändern, um zu zeigen, wie man mit einer null
-Queue umgeht.
-
Öffnen Sie die Datei QueueCheck.java
im WebIDE-Editor.
-
Ändern Sie die main
-Methode, um eine Prüfung auf eine null
-Queue einzubeziehen. Ersetzen Sie die vorhandene main
-Methode durch den folgenden Code:
import java.util.LinkedList;
import java.util.Queue;
public class QueueCheck {
public static void main(String[] args) {
// Create a Queue using LinkedList
Queue<String> myQueue = new LinkedList<>();
// Check if the queue is null before checking emptiness or size
if (myQueue != null) {
// Check if the queue is empty using isEmpty()
boolean isEmptyBeforeAdd = myQueue.isEmpty();
System.out.println("Is the queue empty before adding elements (isEmpty())? " + isEmptyBeforeAdd);
// Check if the queue is empty using size()
boolean isEmptyBySizeBeforeAdd = (myQueue.size() == 0);
System.out.println("Is the queue empty before adding elements (size() == 0)? " + isEmptyBySizeBeforeAdd);
// Add some elements to the queue
myQueue.add("Element 1");
myQueue.add("Element 2");
// Check if the queue is empty again using isEmpty()
boolean isEmptyAfterAdd = myQueue.isEmpty();
System.out.println("Is the queue empty after adding elements (isEmpty())? " + isEmptyAfterAdd);
// Check if the queue is empty again using size()
boolean isEmptyBySizeAfterAdd = (myQueue.size() == 0);
System.out.println("Is the queue empty after adding elements (size() == 0)? " + isEmptyBySizeAfterAdd);
// Print the size of the queue
System.out.println("Current queue size: " + myQueue.size());
} else {
System.out.println("The queue is null. Cannot perform operations.");
}
// Example with a null queue reference
Queue<String> nullQueue = null;
// Attempting to check isEmpty() or size() on nullQueue without a null check would cause a NullPointerException
System.out.println("\nChecking a potentially null queue:");
if (nullQueue != null) {
boolean isNullQueueEmpty = nullQueue.isEmpty();
System.out.println("Is the null queue empty? " + isNullQueueEmpty);
} else {
System.out.println("The null queue is indeed null. Handled correctly.");
}
}
}
Wir haben den ursprünglichen Code, der auf myQueue
operiert, in einen if (myQueue != null)
-Block eingebettet. Dies stellt sicher, dass wir nur Methoden auf myQueue
aufrufen, wenn es nicht null
ist. Wir haben auch einen Abschnitt hinzugefügt, um die Prüfung einer Variablen zu demonstrieren, die explizit auf null
gesetzt wurde.
-
Speichern Sie die geänderte Datei QueueCheck.java
.
-
Öffnen Sie das Terminal und stellen Sie sicher, dass Sie sich im Verzeichnis ~/project
befinden.
-
Kompilieren Sie das aktualisierte Java-Programm:
javac QueueCheck.java
-
Führen Sie das kompilierte Programm aus:
java QueueCheck
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Is the queue empty before adding elements (isEmpty())? true
Is the queue empty before adding elements (size() == 0)? true
Is the queue empty after adding elements (isEmpty())? false
Is the queue empty after adding elements (size() == 0)? false
Current queue size: 2
Checking a potentially null queue:
The null queue is indeed null. Handled correctly.
Diese Ausgabe zeigt, dass unser Code sowohl den Fall, in dem die Queue initialisiert ist, als auch den Fall, in dem der Verweis auf die Queue null
ist, korrekt behandelt und so eine NullPointerException
vermeidet. Denken Sie immer daran, auf null
zu prüfen, wenn Sie in Java mit Objektverweisen arbeiten, insbesondere wenn diese aus externen Quellen stammen oder das Ergebnis von Operationen sein können, die null
zurückgeben können.