Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में ClassNotFoundException और NoClassDefFoundError में क्या अंतर है?


ClassNotFoundException और NoClassDefFoundError दोनों ही एरर हैं जब JVM या ClassLoader रन-टाइम पर लोड करते समय उपयुक्त क्लास नहीं ढूंढ पाता। ClassNotFoundException एक चेक्ड अपवाद है और NoClassDefFoundError एक Error है जो अनचेक्ड के अंतर्गत आता है।

विभिन्न प्रकार के ClassLoader अलग-अलग स्रोतों से क्लासेस लोड करते हैं, कभी-कभी यह लाइब्रेरी JAR फाइल्स के गायब होने या गलत क्लास-पथ का कारण बन सकता है जो लोडर को रन-टाइम पर क्लास लोड करने में असमर्थ बनाता है।

ClassNotFoundException

ClassNotFoundException तब आता है जब हम रिफ्लेक्शन का उपयोग करके रन-टाइम पर एक क्लास लोड करने का प्रयास करते हैं और यदि वे क्लास फाइल्स गायब हैं तो एप्लिकेशन या प्रोग्राम ClassNotFoundException अपवाद के साथ फेंका जाता है। कंपाइल-टाइम पर जांचने के लिए कुछ भी नहीं है क्योंकि यह रन-टाइम पर क्लास लोड कर रहा है।

उदाहरण

public class ClassNotFoundExceptionTest {
    public static void main(String[] args) {
        try {
            Class.forName("Test");
        } catch (ClassNotFoundException cnfe) {
            System.err.println("आप एक ऐसी क्लास खोजने का प्रयास कर रहे हैं जो मौजूद नहीं है। " + cnfe);
        }
    }
}

आउटपुट

आप एक ऐसी क्लास खोजने का प्रयास कर रहे हैं जो मौजूद नहीं है। java.lang.ClassNotFoundException: Test

NoClassDefFoundError

NoClassDefFoundError तब फेंका जाता है जब एक क्लास को क्लासपथ से एक विशिष्ट क्लास के साथ कंपाइल किया गया हो लेकिन वही क्लास रन-टाइम के दौरान उपलब्ध न हो। गायब JAR फाइल्स NoClassDefFoundError प्राप्त करने का सबसे मूल कारण हैं। जावा API डॉक्स के अनुसार "खोजी गई क्लास परिभाषा तब मौजूद थी जब वर्तमान में निष्पादित हो रही क्लास कंपाइल हुई थी, लेकिन परिभाषा अब नहीं मिल सकती।"

उदाहरण

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 मिलेंगी, Test2 क्लास चलाते समय बस Test1.class फाइल को हटा दें फिर हमें नीचे दिखाए अनुसार NoClassDefFoundError मिलेगा।

आउटपुट

Exception in thread "main" java.lang.NoClassDefFoundError: Test1
    at Test2.main(Test2.java:9)

  1. Java में JTextField और JTextArea में क्या अंतर है? Java में JTextField और JTextArea में क्या अंतर है?

    Java में JTextField और JTextArea के बीच मुख्य अंतर यह है कि एक JTextField GUI एप्लिकेशन में टेक्स्ट की सिंगल लाइन एंटर करने की अनुमति देता है जबकि JTextArea GUI एप्लिकेशन में टेक्स्ट की मल्टीपल लाइन्स एंटर करने की अनुमति देता है। JTextField एक JTextField सबसे महत्वपूर्ण कंपोनेंट्स में से एक है जो

  1. Java में JFrame और JDialog में क्या अंतर है? Java में JFrame और JDialog में क्या अंतर है?

    JFrame फ्रेम में जोड़े गए कंपोनेंट्स को इसकी सामग्री कहा जाता है, इन्हें contentPane द्वारा प्रबंधित किया जाता है। JFrame में कंपोनेंट जोड़ने के लिए, हमें इसके contentPane का उपयोग करना चाहिए। एक JFrame में टाइटल, बॉर्डर, (वैकल्पिक) मेनू बार और यूज़र-स्पेसिफाइड कंपोनेंट्स के साथ एक विंडो होती है। ए

  1. Java में GridLayout और GridBagLayout में क्या अंतर है? Java में GridLayout और GridBagLayout में क्या अंतर है?

    एक GridLayout सभी कंपोनेंट्स को एक आयताकार ग्रिड में रखता है और इसे समान आकार के आयतों में विभाजित करता है और प्रत्येक कंपोनेंट को एक आयत के अंदर रखा जाता है जबकि GridBagLayout एक लचीला लेआउट मैनेजर है जो कंपोनेंट्स को वर्टिकली और हॉरिजॉन्टली संरेखित करता है बिना यह आवश्यकता के कि कंपोनेंट्स समान आक