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 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.
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(); } }
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