? Jedes Java-Programmierer schließlich schreibt ein Programm, das " NullPointerExceptions " Fehlermeldung produziert . Es ist besonders für diejenigen, die kryptischen Beginn ihrer Karriere durch Programmierung Lernen Java , die weder durch das Gerät Programmierer auf das Konzept eines Zeigers . Pointers
Ein Zeiger ist ein Informatik- Begriff für eine Variable, die , statt mit einem Bit an Information , hält eine Adresse , wo diese Informationen können in einem Computer- Speicher gefunden werden. Sie können die Variable als Wegweiser vorstellen, dass "Punkte" , wo die Informationen abgerufen werden können . In Sprachen wie C + +, hat der Programmierer eine explizite Entscheidung darüber , ob eine bestimmte Variable wird die Information direkt halten oder halten stattdessen einen Zeiger auf die Information und diese Wahl kann eine tief greifende Wirkung auf die Effizienz des Programms haben zu machen. Zum Beispiel, wenn eine bestimmte Klasse enthält ein paar Megabyte im Wert von Informationen, die in einer Funktion übergeben werden muss , ist es viel effizienter , um die Funktion einen Zeiger , als all die Informationen direkt zu kopieren.
Java Programmierer Ersatzteile dieses Dilemma und die Bugs kann es durch versteckte Hinweise aus der Programmierer produzieren .
Null
Null ist ein weiteres besonderes Begriff in der Informatik. Er bezieht sich auf eine Variable, die wörtlich enthält keine Informationen. Bis einige Informationen, die ihm zugeordnet wird , es wird gesagt , dass sie gleich null . Zum Beispiel in dem folgenden Code:
String s; s = new String () ;
Nachdem die erste Zeile ist abgeschlossen, "s" ist gleich null . Nach der zweiten Zeile ist abgeschlossen, "s" ist gleich einer leeren Zeichenfolge.
Null Pointers
Obwohl Java versucht, Zeiger von dem Programmierer zu verbergen, gibt es eine Instanz , wenn es nicht so zu tun. Alle Klassen sind tatsächlich Zeigern auf Speicherstellen in dem die Daten für die Klasse zu finden sind. Dies macht es schneller, wenn Klassen übergeben werden und von Funktionen . Doch in dem obigen Beispiel , nachdem die erste Zeile ausgeführt wird, hat ein Zeiger wurde beiseite gesetzt " s ", aber keine Daten erstellt wurde. "s" hat keine Erinnerung beiseite für sie eingestellt , so ist es eine " Null-Zeiger . "
Null Pointer Exceptions
Nun, da Sie wissen, was eine Null-Zeiger ist beachten Sie die folgenden zwei Zeilen Code :
String s; s.charAt (0); //Das erste Zeichen des Strings
der Code wird für das erste Zeichen zu fragen . ein String -Objekt, das einfach nicht existiert. Mit anderen Worten, es wird für das nicht verlangt. Sobald dies der Fall ist , erkennt das Problem und Java wirft eine " NullPointerException " , damit der Benutzer oder der Programmierer wissen, dass etwas schief gegangen ist .
Beispiel
meisten Java-Programmierer würde nie den Fehler oben : sie wissen Objekte wie Strings mit dem "neuen " Befehl initialisiert werden muss . Allerdings betrachten die folgende Funktion :
public void print ( String s ) {System.out.println ( s );}
Zunächst sieht dieser Code fein: die Funktion erhält einen String aus anderer Stelle im Programm und druckt sie auf dem Bildschirm . Was aber, wenn die Person, die die Funktion gesendet ist eine Zeichenfolge, die nicht richtig initialisiert wurde ? Eine NullPointerException geworfen würde . Werden
Debugging und zur Verhütung
Der erste Schritt zur Verhinderung NullPointerExceptions ist sicherzustellen, dass die neue Klasse Objekte werden immer korrekt initialisiert . Doch niemand perfekt ist , so ist der zweite Schritt in die Gewohnheit der darstellenden Daten für polizeiliche Funktionen zu bekommen. Eingehende Daten immer als unseriös behandelt werden , so dass die folgenden Änderungen vorgenommen werden könnten :
public boolean print ( String s ) { try { System.out.println (s); return true; //Lassen Sie den Rest des Programms wissen, dass die Operation erfolgreich war } catch ( NullPointerException e) { return false; .. //Lassen Sie den Rest des Programms wissen, der Vorgang fehlgeschlagen }}
der Vorteil dieser proaktive Ansatz ist , dass der Rest der das Programm geschrieben , um zu beurteilen , wie ernst das Problem ist , anstatt sofort scheitern und geben dem Anwender eine hässliche und kryptische Fehlermeldung werden.