ClassNotFoundException frente a NoClassDefFoundError en Java

Ambas excepciones que son ClassNotFoundException y NoClassDefFoundError ocurren cuando la clase no se encuentra en tiempo de ejecución. Están relacionados con el classpath de Java. 

ClassNotFoundException

ClassNotFoundException ocurre cuando intenta cargar una clase en tiempo de ejecución usando los métodos Class.forName() o loadClass() y las clases solicitadas no se encuentran en classpath. La mayoría de las veces, esta excepción ocurrirá cuando intente ejecutar una aplicación sin actualizar el classpath con archivos JAR. Esta excepción es una excepción comprobada derivada de la clase java.lang.Exception y debe proporcionarle un manejo explícito . Esta excepción también ocurre cuando tiene dos cargadores de clases y si un ClassLoader intenta acceder a una clase que está cargada por otro cargador de clases en Java. Debe preguntarse qué es en realidad el cargador de clases en Java. Cargador de clases Javaes una parte del Java Runtime Environment que carga dinámicamente las clases de Java en JVM (Java Virtual Machine). Java Runtime System no necesita conocer archivos y sistemas de archivos debido a los cargadores de clases. 

Ejemplo

Java

// Java Program to Illustrate ClassNotFoundException
public class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Try block to check for exceptions
        try {
 
            Class.forName("GeeksForGeeks");
        }
 
        // Catch block to handle exceptions
        catch (ClassNotFoundException ex) {
 
            // Displaying exceptions on console along with
            // line number using printStackTrace() method
            ex.printStackTrace();
        }
    }
}

Producción:

ClassNotFoundException se genera en el programa anterior ya que la clase «GeeksForGeeks» no se encuentra en el classpath.

No Error Clase Def Encontrado

Ahora, la siguiente excepción que es NoClassDefFoundError ocurre cuando la clase estuvo presente durante el tiempo de compilación y el programa se compiló y vinculó con éxito, pero la clase no estuvo presente durante el tiempo de ejecución. Es un error que se deriva de LinkageError . El error de vinculación ocurre cuando una clase tiene algunas dependencias en otra clase y la última clase cambia después de la compilación de la clase anterior. NoClassFoundError es el resultado de una carga implícitade clase debido a llamar a un método o acceder a una variable de esa clase. Este error es más difícil de depurar y encontrar la razón por la que ocurrió este error. Entonces, en este caso, siempre debe verificar las clases que dependen de esta clase. Para ilustrar, primero hagamos dos clases cualesquiera para un programa java y vinculémoslas. 

Ejemplo

Java

// Java Program to Illustrate NoClassDefFoundError Exception
 
// Class 1
// Helper class
class GeeksForGeeks {
 
    // Method
    void greeting()
    {
        // Print statement whenever method is called
        System.out.println("hello!");
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
        // Creating object of class 1
        // inside main() in class2
        GeeksForGeeks geeks = new GeeksForGeeks();
 
        // Calling method of above class
        geeks.greeting();
    }
}
Producción

hello!

Explicación de salida: 

El programa anterior se compilará con éxito y generará dos clases ‘GeeksForGeeks.class’ y ‘GFG.class’. Ahora elimine el archivo GeeksForGeeks.class y ejecute GFG.class cuando vimos que en el tiempo de ejecución de Java se lanzará NoClassDefFoundError .

ClassNotFoundException frente a NoClassDefFoundError

  • Como sugiere el nombre, ClassNotFoundException es una excepción, mientras que NoClassDefFoundError es un error.
  • ClassNotFoundException ocurre cuando classpath no se actualiza con los archivos JAR requeridos, mientras que se produce un error cuando la definición de clase requerida no está presente en el tiempo de ejecución.

Publicación traducida automáticamente

Artículo escrito por NishuAggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *