दोनों ClassNotFoundException और NoClassDefFoundError जब JVM या ClassLoader रन-टाइम पर लोड करते समय उपयुक्त वर्ग खोजने में सक्षम नहीं होते हैं तो त्रुटियाँ होती हैं। ClassNotFoundException एक जाँच अपवाद है और NoClassDefFoundError एक त्रुटि है जो अनियंत्रित के अंतर्गत आती है।
ClassLoader . के विभिन्न प्रकार हैं अंतर स्रोतों से कक्षाओं को लोड करता है, कभी-कभी यह पुस्तकालय जेएआर फाइलों को गायब या गलत वर्ग-पथ का कारण बन सकता है जिसके कारण लोडर रन-टाइम पर कक्षा को लोड करने में सक्षम नहीं होता है।
ClassNotFoundException
ClassNotFoundException तब आता है जब हम परावर्तन का उपयोग करके रन-टाइम पर एक वर्ग को लोड करने का प्रयास करते हैं और यदि वे वर्ग फाइलें गायब हैं तो एप्लिकेशन या प्रोग्राम को ClassNotFoundException के साथ फेंक दिया जाता है। अपवाद। संकलन-समय पर जाँच करने के लिए कुछ भी नहीं है क्योंकि यह कक्षा को रन-टाइम पर लोड कर रहा है।
उदाहरण
public class ClassNotFoundExceptionTest { public static void main(String[] args) { try { Class.forName("Test"); } catch (ClassNotFoundException cnfe) { System.err.println("You are trying to search for a class is not existing. "+cnfe); } } }
आउटपुट
You are trying to search for a class is not existing. java.lang.ClassNotFoundException: Test
NoClassDefFoundError
NoClassDefFoundError तब फेंका जाता है जब एक वर्ग को क्लासपाथ से एक विशिष्ट वर्ग के साथ संकलित किया जाता है, लेकिन यदि एक ही वर्ग रन-टाइम के दौरान उपलब्ध नहीं होता है। JAR फ़ाइलें गुम होना NoClassDefFoundError . प्राप्त करने का सबसे बुनियादी कारण है . जावा एपीआई डॉक्स के अनुसार "खोज-के लिए वर्ग परिभाषा मौजूद थी जब वर्तमान में निष्पादित वर्ग संकलित किया गया था, लेकिन परिभाषा अब नहीं मिल सकती है।"
उदाहरण
class Test1 { public void show() { System.out.println("show() method called"); } } public class Test2 { public static void main(String[] args) { Test1 t = new Test1(); t.show(); } }
जब हम दोनों वर्गों को संकलित करते हैं तो हमें दो वर्ग फ़ाइलें मिलती हैं Test1.class और Test2.class, टेस्ट2 running चलाते समय क्लास बस Test1.class को हटा दें फ़ाइल तो हमें NoClassDefFoundError मिल रही होगी नीचे के रूप में
आउटपुट
Exception in thread "main" java.lang.NoClassDefFoundError: Test1 at Test2.main(Test2.java:9)