"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > ClassNotFoundException और NoClassDefFoundError के बीच अंतर को समझना

ClassNotFoundException और NoClassDefFoundError के बीच अंतर को समझना

2024-11-08 को प्रकाशित
ब्राउज़ करें:975

Understanding the Difference Between ClassNotFoundException and NoClassDefFoundError

1. ClassNotFoundException का अवलोकन

ClassNotFoundException जावा में एक चेक अपवाद है जो तब होता है जब कोई एप्लिकेशन किसी क्लास को उसके नाम के माध्यम से लोड करने का प्रयास करता है लेकिन उसे ढूंढ नहीं पाता है। ऐसा अक्सर तब होता है जब क्लास क्लासपाथ में मौजूद नहीं होती है।

1.1 ClassNotFoundException का क्या कारण है?

  • लापता क्लास फ़ाइल : क्लास फ़ाइल क्लासपाथ या निर्दिष्ट स्थान से गायब हो सकती है।
  • टाइपोग्राफ़िकल त्रुटि: क्लास नाम या पैकेज संरचना में कोई टाइपो हो सकता है।
  • गलत क्लासपाथ कॉन्फ़िगरेशन : क्लास वाली निर्देशिका या JAR फ़ाइल को शामिल करने के लिए क्लासपाथ को सही ढंग से सेट नहीं किया जा सकता है।

1.2 ClassNotFoundException को कैसे हल करें?

क्लासपाथ जांचें : सत्यापित करें कि क्लास वाली निर्देशिका या JAR फ़ाइल क्लासपाथ में शामिल है।

java -cp /path/to/classes:/path/to/jars/* com.example.Main

कक्षा का नाम सत्यापित करें : सुनिश्चित करें कि आपके कोड में कक्षा का नाम और पैकेज संरचना सही ढंग से निर्दिष्ट है।

बिल्ड कॉन्फ़िगरेशन का निरीक्षण करें : मेवेन या ग्रैडल जैसे बिल्ड टूल के लिए, सुनिश्चित करें कि निर्भरताएं सही ढंग से परिभाषित हैं।

1.3 उदाहरण कोड और डेमो

public class Main {
    public static void main(String[] args) {
        try {
            Class.forName("com.example.NonExistentClass");
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found: "   e.getMessage());
        }
    }
}

अपेक्षित आउटपुट:

Class not found: com.example.NonExistentClass

इस उदाहरण में, Class.forName("com.example.NonExistentClass") एक ClassNotFoundException फेंक देगा क्योंकि क्लास NonExistentClass मौजूद नहीं है।

2. NoClassDefFoundError को समझना

NoClassDefFoundError एक त्रुटि है जो तब होती है जब जावा वर्चुअल मशीन (JVM) या ClassLoader उदाहरण एक क्लास को लोड करने का प्रयास करता है जो संकलन के दौरान मौजूद था लेकिन रनटाइम के दौरान नहीं मिला।

2.1 NoClassDefFoundError का क्या कारण है?

  • क्लास फ़ाइल रनटाइम पर गायब है: क्लास कंपाइल-टाइम के दौरान मौजूद थी लेकिन रनटाइम पर गायब है।
  • क्लास लोडिंग मुद्दे: क्लास संकलन के दौरान क्लासपाथ में मौजूद हो सकती है, लेकिन फ़ाइल भ्रष्टाचार या क्लासपाथ परिवर्तन जैसे मुद्दों के कारण रनटाइम पर पहुंच योग्य नहीं है।
  • क्लास संस्करण बेमेल: क्लास फ़ाइल JVM या अन्य निर्भरता के संस्करण के साथ असंगत हो सकती है।

2.2 NoClassDefFoundError का समाधान कैसे करें?

रनटाइम क्लासपाथ की जांच करें : सुनिश्चित करें कि सभी आवश्यक कक्षाएं रनटाइम पर क्लासपाथ में मौजूद हैं।

java -cp /path/to/classes:/path/to/jars/* com.example.Main

निर्भरता संस्करणों का निरीक्षण करें : सत्यापित करें कि क्लास फ़ाइलें वर्तमान रनटाइम वातावरण के साथ संगत हैं।

पुनर्निर्माण और स्वच्छ परियोजना: कभी-कभी, परियोजना का पुनर्निर्माण और सफाई करने से दूषित वर्ग फ़ाइलों से संबंधित समस्याएं हल हो सकती हैं।

2.3 उदाहरण कोड और डेमो

यहां एक उदाहरण दिया गया है जो NoClassDefFoundError को ट्रिगर कर सकता है:

public class Main {
    public static void main(String[] args) {
        new UtilityClass().performAction();
    }
}

यह मानते हुए कि यूटिलिटीक्लास संकलन-समय के दौरान उपलब्ध था, लेकिन रनटाइम के दौरान क्लासपाथ से गायब है, आपको इसका सामना करना पड़ सकता है:

अपेक्षित आउटपुट:

Exception in thread "main" java.lang.NoClassDefFoundError: com/example/UtilityClass

3. ClassNotFoundException और NoClassDefFoundError के बीच मुख्य अंतर

घटना का समय:

  • ClassNotFoundException रनटाइम के दौरान होता है जब क्लास को गतिशील रूप से लोड किया जा रहा है (उदाहरण के लिए, प्रतिबिंब का उपयोग करके)।
  • NoClassDefFoundError तब होता है जब संकलन-समय के दौरान उपलब्ध क्लास को रनटाइम के दौरान नहीं पाया जा सकता है।

अपवाद बनाम त्रुटि:

  • ClassNotFoundException एक चेक किया गया अपवाद है, इसलिए इसे विधि हस्ताक्षर में संभाला या घोषित किया जाना चाहिए।
  • NoClassDefFoundError एक त्रुटि है, जिसका उद्देश्य पकड़ना या संभालना नहीं है बल्कि यह क्लासपाथ या क्लास लोडिंग में गंभीर समस्याओं का संकेत देता है।

विशिष्ट उपयोग के मामले:

  • उन मामलों को संभालने के लिए ClassNotFoundException का उपयोग करें जहां कोई क्लास गायब हो सकती है या गलत तरीके से संदर्भित हो सकती है।
  • कक्षा उपलब्धता और क्लासपाथ अखंडता से संबंधित अधिक गंभीर मुद्दों का निदान करने के लिए NoClassDefFoundError का उपयोग करें।

4. निष्कर्ष

ClassNotFoundException और NoClassDefFoundError के बीच अंतर को समझने से आपको क्लास लोडिंग समस्याओं का अधिक प्रभावी ढंग से निवारण करने में मदद मिल सकती है। यदि आपके कोई प्रश्न हैं या आगे स्पष्टीकरण की आवश्यकता है, तो बेझिझक नीचे एक टिप्पणी छोड़ें!

यहां अधिक पोस्ट पढ़ें : ClassNotFoundException और NoClassDefFoundError के बीच अंतर को समझना

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/anh_trntun_4732cf3d299/understand-the-difference-between-classnotfoundexception-and-noclassdefounderror-3fo0?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3