Les cas ou java.lang.nullpointerexception est levée

On a souvent cette erreur dans nos programmes java.lang.NullPointerException. Ce bug est lancé quand vous essaierez d'utiliser un objet null qui n'a pas de valeur dans les cas suivants:
  • Appeler une instance de méthode null.
  • Accéder ou modifier l'instance d'un objet null.
  • L’exception est prévu de lever.
  • Lors de l'appel de la longueur du tableau null.
  • Lors de l'accès à des emplacements nul comme un tableau.
  • Lors de la synchronisation d'un objet null ou de l'utiliser à l'intérieur d'un bloc synchronized.
Quel est le moyen qui détermine la cause et arrête l'exception qui a mis fin à l’exécution du programme?

Les objets sont référencés par des pointeurs en java

Un objet est une instance de classe ou un tableau, les références sont des pointeurs vers ces objets et une référence null se réfère à aucun objet.
Quand vous déclarez une variable, Java initialise la variable x à 0 et un pointeur est créé et réfère cet objet. Par exemple, dans le code qui suit on va déclarer une variable x:

int x;
x = 5;
Dans cet exemple, la variable x est initialisé par défaut à zéro et la deuxième ligne la valeur 5 est écrite dans l'emplacement mémoire pointé par x. Java interdit au programmeur de manipuler les cases mémoire, il vous donne accès qu'aux méthode de l'objet et pas l'emplacement mémoire.

Les cas ou NullPointerException est levée

1) Appeler une méthode d'une instance null

Point point = null;
point.getX();
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:27)
2) Accéder ou modifier l'instance d'un objet null.
L'accès à une référence null déclenche l'exception NullPointerException:

Point point = null;
point.getX();
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:38)
3) Lors de l'utilisation de throw null
throw vérifie que l'argument est non nul, et s'il est nul, elle lève NullPointerException.

IOException nullException = null;
try {
throw nullException;
} catch (IOException e) {
e.printStackTrace();
}
4) Lors de l'appel de la longueur du tableau null

char[] ch = null;
int length = ch.length;
5) Lors de l'accès à des emplacements nul comme un tableau
Un exemple est d'accéder aux cases d'un tableau null.

char[] ch = null;
char c = ch[0];
6) Lors de la synchronisation d'un objet null
Vous obtenez NullPointerException si vous tentez de synchroniser un objet null ou de le mettre à l'intérieur d'un bloc synchronisé.

Thread th=null;
synchronized(th){
System.out.print("ce thread est synchronisé");
}

Quelles sont les préventions

  • La meilleur façon pour éviter ce type d’exception dans le cas ou vous n'avez pas créer l'objet vous-même est de vérifier si l'objet est nul. Le code doit être écrit comme ça:

    • void afficher(String phrase){
      //vérifier si phrase n'est pas nulle
      if(phrase!=null)
      System.out.print(phrase);
      }
      Cette solution n'est pas optimale dans certains cas parce que l'objet est nul alors rien ne se passe dans la procédure afficher().
  • Dans les IDE comme Eclipse ou Netbeans, le numéro de la ligne qui a déclenché l'erreur s'affiche. C'est un bon moyen pour identifier le type d'erreur.
  • Les variables peuvent avoir une valeur par défaut comme le String dans ce code:

    • String chaine = "";
  • Initialisez les cases après la déclaration d'un tableau.

    • //Déclaration
      Thread[] th=new Thread[3];
      //Initialisation
      th[0]=new Thread();
      th[1]=new Thread();
      th[2]=new Thread();
  • Utilisez des variables booléenne, compteurs,...etc pour optimiser votre code.