? Chaque programmeur Java finalement écrit un programme qui génère le message d'erreur " NullPointerExceptions " . Il est particulièrement énigmatique pour ceux qui commencent leur carrière de programmation par apprentissage Java, qui n'expose pas les programmeurs à la notion d' un pointeur. Pointeurs
Un pointeur est un terme d'informatique pour une variable qui , au lieu de tenir un bit d'information , est titulaire d'une adresse à l'endroit où cette information peut être trouvée dans la mémoire d'un ordinateur. Vous pouvez imaginer la variable comme un poteau indicateur qui «points» à l'endroit où l'information peut être trouvée. Dans les langages comme C + + , le programmeur doit faire un choix explicite quant à savoir si une variable donnée tiendra les informations directement ou participera plutôt à un pointeur à l'information et ce choix peut avoir un effet profond sur l'efficacité du programme. Par exemple, si une classe donnée détient quelques mégaoctets valeur de l'information qui doit être communiquée dans une fonction, il est beaucoup plus efficace pour donner la fonction de pointeur que de copier toutes les informations directement .
Java pièces de rechange programmeurs ce dilemme et les bugs il peut produire en cachant des pointeurs du programmeur.
Null
Null est un autre terme spécifique en informatique . Il fait référence à une variable qui contient littéralement aucune information. Jusqu'à ce que certaines informations lui est attribué , il est dit être égale à nulle. Par exemple, dans le code suivant :
String s ; s = new String () ;
Après la première ligne est terminée, "s" est égal à null. Après la deuxième ligne est terminée, "s" est égal à une chaîne vide.
Null pointeurs
Bien que Java tente de cacher pointeurs du programmeur, il ya un cas où il ne peut pas le faire. Toutes les classes sont en fait des pointeurs vers des emplacements de mémoire où les données de la classe peuvent être trouvées. Cela le rend plus rapide lorsque les classes doivent être passés dans et hors de fonctions . Cependant , dans l'exemple ci-dessus, après la première ligne est exécutée, un pointeur a été mis de côté pour « s », mais pas de données a été créée. "s" n'a pas de mémoire réservée pour elle, il est donc un " pointeur NULL. "
Null exceptions de pointeur
Maintenant que vous savez ce qu'est un pointeur NULL est , considérons les deux lignes de code suivantes:
string s ; s.charAt (0); //récupère le premier caractère de la chaîne
le code est demandé pour le premier caractère d' . un objet chaîne qui n'existe tout simplement pas . En d'autres termes , il demande l' impossible. Dès que cela se produit, Java rend compte du problème et lance un " NullPointerException " pour permettre à l'utilisateur ou le programmeur savent que quelque chose s'est mal passé .
Exemple
plus les programmeurs Java n'auraient jamais faire l'erreur ci-dessus : ils savent objets comme les chaînes doivent être initialisés avec la commande "Nouveau " . Cependant, considérons la fonction suivante:
print public void (String s) {System.out.println ( s) ; }
Initialement , ce code a l'air bien : la fonction reçoit une chaîne de ailleurs dans le programme et affiche à l'écran . Toutefois, si la personne qui exécute la fonction envoyé est une chaîne qui n'a pas été correctement initialisé ? A NullPointerException serait jeté .
Débogage et empêcher
La première étape de la prévention NullPointerExceptions est de s'assurer que les nouveaux objets de classe sont toujours correctement initialisé. Cependant, personne n'est parfait, donc la deuxième étape consiste à prendre l'habitude d'effectuer données policières pour les fonctions. Les données entrantes doivent toujours être considérés comme indignes de confiance , donc la modification suivante peut être faite:
print public void (String s) { try { System.out.println ( s) ; return true; //Laisser reposer du programme connaissent l'opération a réussi } catch ( NullPointerException e ) {return false; /.. /Laissez le reste du programme connaît l'opération a échoué }}
l'avantage de cette approche proactive est que le reste du programme peut être écrit de juger à quel point le problème est grave , plutôt que d'échouer et donner à l'utilisateur un message d'erreur laid et énigmatique immédiatement .