The difference between classnotfoundexception and Noclassdeffounderror

Source: Internet
Author: User

As their name suggests:Noclassdeffounderror is an error, and ClassNotFoundException is an exception , in Java errors and exceptions are different, We can recover the program from the exception but should not attempt to recover the program from the error.

Causes of ClassNotFoundException:

Java supports the use of the Class.forName method to dynamically load a class, any class name if passed as a parameter to this method will cause the class to be loaded into the JVM memory, if the class is not found in the classpath, then it will be thrown at run time Classnotfoundexcept Ion Anomaly .

The only thing you need to do to solve this problem is to make sure that the required classes, along with the packages that they depend on, exist in the classpath. When Class.forName is called, the ClassLoader looks for classes in the classpath, and if found, the class will be loaded successfully, and if not found, it will throw classnotfountexception, except CLASS.FORNAME,CLASSLOADER.LOADC Lass, Classloader.findsystemclass can also throw this exception when dynamically loading classes into memory.

Another reason for ClassNotFoundException is that when a class is already loaded into memory by a class loader, another class loader is attempting to load the class dynamically from the same package.

Because the dynamic loading of a class is somewhat controlled by the developer, he can choose to catch the exception and then take remedial action accordingly. Some programs may want to ignore this exception and take other methods. There are also programs that terminate the program and then let the user do something before trying again.

Reasons for Noclassdeffounderror production:

If the JVM or the ClassLoader instance tries to load (either through a normal method call, or by using new to create an object), the class definition cannot be found. The class to be found is present at compile time, but cannot be found when running . The error is often that you use the new operator to create a new object but cannot find the corresponding class for that object. This time it will lead to Noclassdeffounderror.

Since Noclassdeffounderror is caused by a JVM, you should not attempt to catch this error.

The solution to this problem is to look for classes that exist in the classpath during development but are not in the classpath at run time .


ClassNotFoundException occurs during the loading phase.
This exception is thrown when an application attempts to load a class with a normal three method by using the string name of the class, but cannot find the class definition of the specified name.

Noclassdeffounderror: When the currently executing class has been compiled, but cannot find its definition

That is, if you compile a class B, called in Class A, after compiling, you delete the B, run a, then this error occurs

There is no need to find a class when loading from external memory classnotfoundexception
Noclassdeffounderror occurs when a required class is not found from memory when connected


Three ways to solve Noclassdeffounderror:

1. Simple example of Noclassdeffounderror are class belongs to a jar and jar were not added into classpath or sometime jar ' s NA Me have been changed by someone like in my case one of my colleague have changed  tibco.jar  INTO  tibco_v3.jar  and by program are failing with Java.lang.NoClassDefFoundError and I were wondering what ' s wrong.

First of all, the class depends on the other jar package at runtime, However, the jar package was not loaded into classpath or the name of the jar package was changed by someone else, just like one of my examples Tibo.jar changed to Tibco_v3.jar ...

2. Class is not in Classpath, there is no sure shot it's knowing it but many a times you can just has a look to print Syst Em.getproperty (" Java.classpath ") and it'll print the classpath from there can At least get a idea of your actual runtime classpath.

run class is not in classpath, this problem does not have a definite method to know, but many times you can pass system.getproperty (" java.classpath " method, which allows you to at least get a glimpse of the classpath that actually existed during the run.

  BR style= "padding:0px; margin:0px ">3. Just try-to-run with EXPLICITLY-CLASSPATH option with the classpath you think would work and if it working then it ' s sure Short sign, that some one is  overriding Java Classpath

Try to clearly point out through the-classpath command that you think the correct classpath, if the normal execution of the words you use the classpath is correct, and the system classpath has been repaired.

The difference between classnotfoundexception and Noclassdeffounderror

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.