Ich habe von dem Lehrer gehört, dass die meisten Anomalien in zukünftigen Studien Null -Zeiger -Ausnahmen sind. Nehmen Sie sich also etwas Zeit, um Spiele zu spielen, um zu überprüfen, was eine Ausnahme von Nullzeiger ist
1: Die Hauptgründe für das Auftreten von Nullzeigerausnahmen sind wie folgt:
(1) Wenn ein Objekt nicht existiert, generiert es eine Ausnahme obj.method () // Das OBJ -Objekt existiert nicht
(2) Beim Zugriff auf oder ändern Sie ein Feld, das in einem Objekt nicht vorhanden ist, wird eine Ausnahme erzeugt.
(3) die Zeichenfolgenvariable wird nicht initialisiert;
(4) Die Objekte von Schnittstellentypen werden nicht mit bestimmten Klassen initialisiert, wie z. B.:
Liste LT; meldet einen Fehler
List lt = new ArrayList (); Es wird keinen Fehler geben
Wenn der Wert eines Objekts leer ist, beurteilen Sie nicht leer. Sie können versuchen, vor dem folgenden Code eine Codezeile hinzuzufügen:
if (rb! = null && rb! = "")
Wechsel zu:
if (rb == null); if (rb! == null && rb! = "") oder if ((""). Equals (rb))Lösung für Nullzeiger:
Konzentrieren Sie sich auf die Zeile, in der der Fehler auftritt, und diagnostizieren spezifische Fehler in zwei Hauptgründen, die durch die Ausnahme von Nullzeiger verursacht werden. Um das Auftreten von Nullzeiger zu vermeiden, ist es am besten, "Null "- oder Nullwerte vor dem festgelegten Wert bei der Beurteilung der Beurteilung zu platzieren.
Eine kurze Analyse der gemeinsamen Ausnahmen von Nullzeiger:
(1) Null -Zeiger -Fehler Java.lang.NullPointerexception
In Java gibt es 8 grundlegende Datentypen. Die Werte von Variablen können ihre Standardwerte haben. Wenn sie ohne normale Zuordnung hinzugefügt werden, kann die virtuelle Java -Maschine nicht korrekt kompiliert werden. Daher verursacht die Verwendung grundlegender Java -Datentypen im Allgemeinen keine Ausnahmen von Nullzeiger. In der tatsächlichen Entwicklung hängen die meisten Ausnahmen von Nullzeiger hauptsächlich mit Objektvorgängen zusammen.
2. Java -Ausnahmebehandlung Mechanismus
Es gibt zwei Möglichkeiten, mit dem Code umzugehen, der möglicherweise Ausnahmen hat:
Verwenden Sie zunächst die Anweisung für Versuche ... in der Methode, um Ausnahmen zu fangen und zu handhaben. In der Cache -Anweisung können mehrere Ausnahmen übereinstimmen. Zum Beispiel:
public void p (int x) {try {...} catch (Ausnahme e) {...} endlich {...}} Zweitens, für Ausnahmen, die nicht verarbeitet werden können oder solche, die transformiert werden müssen, geben Sie sie bei der Erklärung der Methode weiter.
Die Anweisung Throws macht eine Ausnahme aus. Zum Beispiel:
public void test1 () löst MyException {... if (....) {neue myexception ();}} ausWenn jede Methode einfach eine Ausnahme ausgelöst hat, sucht die Virtual Machine Java Virtual Machine nach dem Methodencode-Block, in dem die Ausnahme auftritt, bis der Codeblock mit der Ausnahme erfolgt. Geben Sie dann die Ausnahme an die entsprechende Catch -Anweisung zur Verarbeitung. Wenn die virtuelle Java -Maschine am unteren Rand des Methode -Call -Stacks zur main () -Methode zurückgeführt wird, werden die folgenden Schritte behandelt, wenn der Codeblock mit der Ausnahme noch nicht gefunden wird:
Rufen Sie zunächst die PrintStacktrace () -Methode des Ausnahmeobjekts an und drucken Sie die Ausnahmeinformationen des Methode Call Stack.
Zweitens, wenn der Thread, der eine Ausnahme auftritt, der Haupt -Thread ist, endet der gesamte Programm. Wenn es nicht der Hauptfaden ist, wird der Thread beendet und andere Fäden werden weiter ausgeführt.
Durch Analyse und Denken können wir erkennen, dass je früher die abnormale Verarbeitung ist, desto kleiner die Ressourcen und die zeitaufwändigen, desto geringer ist der Umfang der Auswirkungen. Werfen Sie daher keine Ausnahmen aus, die Sie auch mit dem Anrufer verarbeiten können.
Ein weiterer Punkt kann nicht ignoriert werden: Schließlich müssen Anweisungen in jedem Fall Code ausführen, was die Zuverlässigkeit eines Codes sicherstellen kann, der in jedem Fall ausgeführt werden muss. Wenn die Datenbankabfrage beispielsweise abnormal ist, sollte die JDBC -Verbindung freigegeben werden usw. Die schließlich wird die Anweisung vor der Rückgabeanweisung unabhängig von ihrer Reihenfolge oder dem Standort oder der Frage, ob im Try -Block eine Ausnahme vorhanden ist. Die einzige Situation, in der die endgültige Anweisung nicht ausgeführt wird, ist, dass die Methode die Methode von System.exit () ausführt. System.exit () beendet die derzeit ausgeführte Java -Virtual -Maschine. Der Rückgabewert der Rückgabe kann nicht geändert werden, indem der Variablen im endgültigen Anweisungsblock einen neuen Wert zugewiesen wird. Es wird auch empfohlen, die Return -Anweisung im endgültigen Block nicht zu verwenden. Es ist bedeutungslos und kann leicht zu Fehlern führen.
Schließlich sollten Sie auch auf die Syntax -Regeln für die Ausnahmebehandlung achten:
Erstens können Aussagen nicht allein existieren, sondern aus Fang und schließlich bestehen
Versuchen Sie es mit ... Fang ... Versuchen Sie es endlich ... fangen, versuchen Sie es endlich, versuchen Sie es endlich ... schließlich können Erzählungen einen oder mehrere haben, und schließlich können Aussagen höchstens eins sein. Die drei Schlüsselwörter versuchen, fangen und können schließlich nicht allein verwendet werden.
Zweitens ist der Umfang der Variablen in den drei Codeblöcken unabhängig und kann nicht voneinander zugegriffen werden. Wenn Sie in allen drei Blöcken zugänglich sein möchten, müssen Sie die Variable außerhalb dieser Blöcke definieren.
Drittens, wenn mehrere Fangblöcke verwendet werden, entspricht die Java Virtual Machine mit einer der Ausnahmegeräte oder ihrer Unterklasse und führt den Fangblock aus, ohne andere Fangblöcke auszuführen.
Viertens gibt es keine weiteren Aussagen, die nach der Wurfanweisung folgen, da diese nicht die Möglichkeit haben, ausgeführt zu werden.
Fünftens, wenn eine Methode eine andere Methode aufruft, die die ausgeworfene Ausnahme deklariert, wird diese Methode entweder mit der Ausnahme oder die geworfene Erkenntnis behandelt.
2.2Difference zwischen Wurf und Keywords auswirkt:
Wurf wird verwendet, um eine Ausnahme innerhalb des Method -Körpers zu werfen. Das Syntaxformat lautet: Ausnahmeobjekt werfen.
Würfe werden verwendet, um zu erklären, welche Ausnahme mit einer Methode ausgelöst werden kann. Nach dem Methodennamen lautet das Syntaxformat:
löscht Ausnahmetyp 1, Ausnahmetyp 2 ... Ausnahmetyp n.
Drei: Im Folgenden sind mehrere Situationen und entsprechende Lösungen aufgeführt, bei denen Ausnahmen von Nullzeiger auftreten können:
Code -Snippet 1:
out.println (Request.getParameter ("Benutzername"));Analyse: Die Funktion des Codesegments 1 ist sehr einfach, nämlich den Wert der Benutzereingabe "Benutzername" auszugeben.
Hinweis: Es scheint, dass die obige Anweisung keine Syntaxfehler finden kann, und in den meisten Fällen gibt es kein Problem. Wenn ein Benutzer jedoch bei der Eingabe von Daten nicht den Wert des Formfeldfelds "Benutzername" angibt oder das Formular direkt in irgendeiner Weise umgeht. "Java.lang.nullpointerexception" -Ausnahme. Auch wenn das Objekt leer sein kann, werden einige Methoden der Java.lang.Object oder Objektobjekt selbst aufgerufen, wie z.
Code -Snippet 2:
String username = request.getParameter ("Benutzername"); If (userername.equals ("root")) {...}Analyse: Die Funktion des Codesegments 2 besteht darin, den vom Benutzer bereitgestellten Benutzernamen zu erkennen. Wenn es sich um einen Benutzer handelt, dessen Benutzername "root" ist, werden einige spezielle Vorgänge ausgeführt.
HINWEIS: In Code -Segment 2 ist der Nutzername des String -Objekts nicht den Wert des Formularfeldfelds "Benutzername" ein Nullwert, und ein Null -Objekt kann nicht direkt mit einem anderen Objekt verglichen werden. In ähnlicher Weise wirft die JSP -Seite, auf der Codesegment 2 sich befindet, einen leeren Zeigerfehler.
Ein kleiner Trick: Wenn Sie den Rückgabewert einer bestimmten Methode mit einer Konstanten vergleichen und die Konstante vor sich stellen möchten, können Sie vermeiden, die Equals -Methode des Null -Objekts aufzurufen. Zum Beispiel:
If ("root" .equals (Benutzername)) {...}Selbst wenn das Benutzername -Objekt ein Null -Objekt zurückgibt, gibt es hier keine Nullzeigerausnahmen und kann wie gewohnt ausgeführt werden.
Snippet 3:
String username = session.getAttribute ("sesername"). ToString ();Analyse: Die Funktion des Code -Segments 3 besteht darin, den Wert der Sitzung in der Sitzung zu übernehmen und den Wert des String -Objekts Benutzername zuzuweisen.
Hinweis: Wenn der Benutzer bereits eine Sitzung hatte, wird kein Problem auftreten. Wenn der Anwendungsserver zu diesem Zeitpunkt jedoch neu gestartet wird und der Benutzer sich nicht erneut angemeldet hat (es kann auch sein, dass der Benutzer den Browser schließt, aber dennoch die Originalseite öffnet). Durch die direkte Ausführung des Betriebs () Operation () auf einem Objekt mit Null wird das System eine Ausnahme von Nullzeiger ausgelöst.
Snippet 4:
public static void main (String args []) {Person p = null; P.SetName ("Zhang San"); System.out.println (p.getName ()); }Analyse: Deklarieren Sie ein Personenobjekt und drucken Sie den Namensnamen im Objekt aus.
Hinweis: Zu diesem Zeitpunkt hat Ihr P eine Ausnahme von Nullzeiger, da Sie gerade erklärt haben, dass dieses Typ -Typ kein Objekt erstellt hat, sodass auf dem Haufen keine Adressreferenz enthalten ist. Erstellen Sie nicht unbedingt ein Objekt, wenn Sie das Objekt verwenden und die Methode verwenden.
A: Verwenden Sie es direkt, unabhängig davon, ob das Objekt leer ist oder nicht.
(JSP) Code -Segment 1:
out.println (Request.getParameter ("Benutzername"));Analyse: Die Funktion des Codesegments 1 ist sehr einfach, nämlich den Wert der Benutzereingabe "Benutzername" auszugeben.
Hinweis: Es scheint, dass die obige Anweisung keine Syntaxfehler finden kann, und in den meisten Fällen gibt es kein Problem. Wenn ein Benutzer jedoch bei der Eingabe von Daten nicht den Wert des Formfeldfelds "Benutzername" angibt oder das Formular direkt in irgendeiner Weise umgeht. "Java.lang.nullpointerexception" -Ausnahme. Auch wenn das Objekt leer sein kann, werden einige Methoden der Java.lang.Object oder Objektobjekt selbst aufgerufen, wie z.
(JSP) Snippet 2:
String username = request.getParameter ("Benutzername"); If (userername.equals ("root")) {...}Analyse: Die Funktion des Codesegments 2 besteht darin, den vom Benutzer bereitgestellten Benutzernamen zu erkennen. Wenn es sich um einen Benutzer handelt, dessen Benutzername "root" ist, werden einige spezielle Vorgänge ausgeführt.
HINWEIS: In Code -Segment 2 ist der Nutzername des String -Objekts nicht den Wert des Formularfeldfelds "Benutzername" ein Nullwert, und ein Null -Objekt kann nicht direkt mit einem anderen Objekt verglichen werden. In ähnlicher Weise werfen die JSP -Seite, auf der Codesegment 2 befindet, einen Null -Zeigerfehler (java.lang.nullpointerexception).
(JSP) Snippet 3:
String username = session.getAttribute ("sesername"). ToString ();Analyse: Die Funktion des Code -Segments 3 besteht darin, den Wert der Sitzung in der Sitzung zu übernehmen und den Wert des String -Objekts Benutzername zuzuweisen.
Hinweis: Wenn der Benutzer bereits eine Sitzung hatte, wird kein Problem auftreten. Wenn der Anwendungsserver zu diesem Zeitpunkt jedoch neu gestartet wird und der Benutzer sich nicht erneut angemeldet hat (es kann auch sein, dass der Benutzer den Browser schließt, aber dennoch die Originalseite öffnet). Durch die direkte Ausführung des TOString () -Operationsbetriebs auf einem Objekt, das Null ist, wird das System eine Ausnahmezeigerausnahme (java.lang.nullpointerexception) null.
Das obige ist der vollständige Inhalt der kurzen Diskussion über die Ausnahme von Java -Ausnahmen von Null -Zeiger -Ausnahmen, die Ihnen vom Herausgeber zur Verfügung gestellt wurden. Ich hoffe, jeder wird Wulin.com mehr unterstützen ~