Java ClassNotFoundException - java.lang.ClassNotFoundException

De Get Docs
Aller à :navigation, rechercher

Java ClassNotFoundException

  • Java ClassNotFoundException se produit lorsque l'application tente de charger une classe mais que Classloader ne parvient pas à la trouver dans le chemin de classe.
  • Causes courantes de java.lang.ClassNotFoundException utilisent Class.forName ou ClassLoader.loadClass pour charger une classe en transmettant le nom de chaîne d'une classe et qu'elle ne se trouve pas dans le chemin de classe.
  • ClassNotFoundException est une exception vérifiée, elle doit donc être interceptée ou lancée à l'appelant.
  • ClassNotFoundException se produit toujours au moment de l'exécution car nous chargeons indirectement la classe à l'aide de Classloader. Le compilateur Java n'a aucun moyen de savoir si la classe sera présente dans le chemin de classe au moment de l'exécution ou non.
  • L'un des exemples les plus courants de ClassNotFoundException est lorsque nous essayons de charger pilotes JDBC en utilisant Class.forName mais oubliez d'ajouter son fichier jar dans le classpath.

Java Exemple d'exception ClassNotFoundException

Prenons un exemple simple où nous obtiendrons ClassNotFoundException.

package com.journaldev.exceptions;

public class DataTest {

  public static void main(String[] args) {
    try {
      Class.forName("com.journaldev.MyInvisibleClass");

      ClassLoader.getSystemClassLoader().loadClass("com.journaldev.MyInvisibleClass");

      ClassLoader.getPlatformClassLoader().loadClass("com.journaldev.MyInvisibleClass");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

}

Notez que com.journaldev.MyInvisibleClass n'existe pas, donc lorsque nous exécutons le programme ci-dessus, nous obtenons la trace de pile d'exception suivante.

java.lang.ClassNotFoundException: com.journaldev.MyInvisibleClass
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:292)
    at com.journaldev.exceptions.DataTest.main(DataTest.java:7)

Dans l'exemple ci-dessus, les trois déclarations lanceront java.lang.ClassNotFoundException.

Comment résoudre ClassNotFoundException

Il est très facile de corriger ClassNotFoundException car la trace de la pile d'exceptions spécifie clairement la classe introuvable. Vérifiez simplement les paramètres de chemin de classe et assurez-vous que la classe est présente au moment de l'exécution.

ClassNotFoundException vs NoClassDefFoundError

NoClassDefFoundError est une erreur d'exécution générée lorsqu'une classe n'est pas trouvée au moment de l'exécution. C'est très similaire à ClassNotFoundException. En savoir plus sur Java NoClassDefFoundError. Référence : API Doc