त्रुटियों से डरें, लेकिन उन्हें जावा में न लिखें! आप शायद जावा में अपवादों के बारे में पहले से ही कुछ बातें जानते हैं । आज कम से कम सतही ज्ञान से आपको लाभ होगा। हम त्रुटि वर्ग और एक विशेष अपवाद प्रकार का विश्लेषण करने जा रहे हैं जो कई लोगों को उनके स्टैक ट्रेस में दिखाई देने पर डराता है।

जावा के अपवाद पदानुक्रम के शीर्ष पर थ्रोएबल क्लास है, जिसके दो वंशज हैं:

  • अपवाद , जो आपके प्रोग्राम में त्रुटियों के लिए ज़िम्मेदार है।
  • और आज के लिए हमारा हीरो — एरर , जो जेवीएम में एरर के लिए जिम्मेदार है।
    यह उल्लेखनीय है कि ये शायद कोडिंग बग भी नहीं हैं, बल्कि ऐसी समस्याएं हैं जो आमतौर पर डेवलपर पर निर्भर नहीं होती हैं।

एरर का क्या करें

"त्रुटियों" को पकड़ते समय, आप लॉगिंग को छोड़कर, कैच ब्लॉक में कोई भी कार्य नहीं कर सकते , क्योंकि हम JVM में ही समस्याओं के बारे में बात कर रहे हैं।

लॉगिंग अच्छा है: जब आपको रनटाइम त्रुटि मिलती है, तो आप लॉग देख सकते हैं, इसका कारण देख सकते हैं और जान सकते हैं कि क्या ठीक करना है।

चूँकि आप नहीं जानते कि अपना कोड लिखते समय आपको किस प्रकार की त्रुटि हो सकती है, कैच ब्लॉक में किसी विशेष प्रकार को लिखने का कोई मतलब नहीं है। त्रुटि वर्ग का उपयोग करना भी सबसे अच्छा समाधान नहीं है, क्योंकि इस मामले में आप केवल त्रुटियां पकड़ेंगे।

तदनुसार, थ्रोएबल क्लास का उपयोग करना बेहतर है , जो त्रुटि और अपवाद दोनों को पकड़ सकता है । यह व्यवहार में कैसा दिखता है?

इस तरह कोड लिखना ठीक नहीं है:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
इस तरह का कोड लिखना भी ठीक नहीं है:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
लेकिन इस तरह कोड ठीक है:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

त्रुटियों को संभालने का दूसरा विकल्प विधि पर फेंके गए खंड को घोषित करने के बाद उन्हें उच्च फेंकना है। इस तकनीक का उपयोग तब किया जाता है जब आपका कोड सैद्धांतिक रूप से एक त्रुटि फेंक सकता है और आप उन सभी को आगाह करना चाहते हैं जो आपके कोड का उपयोग कर सकते हैं ताकि वे त्रुटि को ठीक से संभाल सकें।

आम त्रुटियों

कुछ सबसे लोकप्रिय त्रुटियाँ OutOfMemoryError और StackOverflowError वर्ग हैं।

OutOfMemoryError अक्सर तब प्रकट होता है जब प्रोग्राम में ऑब्जेक्ट बनाने के लिए पर्याप्त मेमोरी नहीं होती है और कचरा संग्राहक नहीं रख सकता है। परिणाम एक OutOfMemoryError है ।

जावा आपको मेमोरी लीक को रोकने के लिए वस्तुओं को मैन्युअल रूप से हटाने की अनुमति नहीं देता है, लेकिन आप कूड़ेदान से बच सकते हैं ताकि कचरा संग्रहकर्ता पर अधिक काम न करें और ढेर को अव्यवस्थित न करें।

उदाहरण के लिए, इस तरह का कोड स्मृति में बहुत कचरा पैदा करेगा:


while (true) {
    new Object();
}

दूसरी त्रुटि जिसके बारे में मैं आपको बताना चाहता हूं वह है StackOverflowError , जो स्टैक ओवरफ्लो होने पर फेंक दी जाती है। चूंकि स्टैक मुख्य रूप से स्थानीय चर, पैरामीटर और विधि कॉल को संग्रहीत करता है, पुनरावर्तन (या एक पुनरावर्ती विधि कॉल) इस त्रुटि का एक बहुत ही सामान्य कारण है:


public void foo() {
    foo();
}

कार्यक्रम के निष्पादन के दौरान समस्याओं से बचने के लिए, आधुनिक आईडीई अक्सर तरीकों को पुनरावर्ती रूप से कॉल करने के बारे में चेतावनी देते हैं।

आप उस प्रोग्राम को ठीक नहीं कर सकते जो Errors फेंकता है , लेकिन आप कोड लिख सकते हैं जो कोई Error नहीं देगा और आपके प्रोग्राम को तोड़ देगा। देखें कि आप स्मृति के साथ क्या करते हैं, वस्तुओं को ध्यान से बनाएं और विधियों को सही तरीके से कॉल करें। यदि आप ऐसा करते हैं, तो आपको अपने कोड में कम समस्याएँ होंगी।

त्रुटि और अपवाद प्रकारों के बीच अंतर

गलती अपवाद
कैच ब्लॉक में सुधारा नहीं जा सकता कैच ब्लॉक में संभाला जा सकता है
संकलन समय पर नहीं होता है संकलन समय पर पकड़ा जा सकता है
जेवीएम में समस्याएं कोड लॉजिक में समस्या
सभी त्रुटियां अनियंत्रित हैं जाँच की और अनियंत्रित

आप जावा में अपवादों से बच नहीं सकते, लेकिन आपको उनसे डरना नहीं चाहिए। आपको बस यह समझने की जरूरत है कि प्रत्येक प्रकार क्या दर्शाता है और इसे कैसे संभालना है। यह सभी आज के लिए है! फिर मिलते हैं!