Codementor Events

ClassNotFoundException vs. NoClassDefFoundError

Published Jul 16, 2018

ClassNotFoundException:-
ClassNotFoundException occurs when you try to load a class at runtime using Class.forName() or loadClass() methods and requested classes are not found in classpath. Most of the time this exception will occur when you try to run application without updating classpath with JAR files. This exception is a checked Exception derived from java.lang.Exception class and you need to provide explicit handling for it. This exception also occurs when you have two class loaders and if a ClassLoader tries to access a class which is loaded by another classloader in Java. You must be wondering that what actually is classloader in Java. Java ClassLoader is a part of Java Runtime Environment that dynamically loads Java classes in JVM(Java Virtual Machine). The Java Runtime System does not need to know about files and files system because of classloaders.
ClassNotFoundException is raised in below program as class “ClassNotFound” is not found in classpath.

// Java program to illustrate
// ClassNotFoundException
public class Example {

public static void main(String args[]) {
    try
    {
        Class.forName("ClassNotFound");
    }
    catch (ClassNotFoundException ex)
    {
        ex.printStackTrace();
    }
}

}

NoClassDefFoundError:-
NoClassDefFoundError occurs when class was present during compile time and program was compiled and linked successfully but class was not present during runtime. It is error which is derived from LinkageError. Linkage error occurs when a class has some dependencies on another class and latter class changes after compilation of former class. NoClassDefFoundError is the result of implicit loading of class because of calling a method or accessing a variable from that class. This error is more difficult to debug and find the reason why this error occurred. So in this case you should always check the classes which are dependent on this class.
Note: This program will not run on IDE. Try to run it on your own systems.
First make any two classes for a java program and link them.

// Java program to illustrate
// NoClassDefFoundError
class NoClassDefFound
{
void greeting()
{
System.out.println("hello!");
}
}

class MainClass {
public static void main(String args[])
{
NoClassDefFound obj = new NoClassDefFound();
obj.greeting();
}
}

  1. As the name suggests, ClassNotFoundException is an exception while NoClassDefFoundError is an error.
  2. ClassNotFoundException occurs when classpath is does not get updated with required JAR files while error occurs when required class definition is not present at runtime.
Discover and read more posts from Narendra Sharma
get started