अपवाद प्रबंधन Java
अपवाद क्या है? Java?
अपवाद Java एक घटना है जो प्रोग्राम निर्देशों के निष्पादन को बाधित करती है और प्रोग्राम निष्पादन के सामान्य प्रवाह को बाधित करती है। यह एक ऑब्जेक्ट है जो एक विधि के भीतर हुई त्रुटि घटना की जानकारी को लपेटता है और इसे रनटाइम सिस्टम में पास किया जाता है। Javaअपवादों का उपयोग मुख्य रूप से विभिन्न प्रकार की त्रुटि स्थितियों को इंगित करने के लिए किया जाता है।
त्रुटियाँ दो प्रकार की होती हैं:
- संकलन समय त्रुटियाँ
- रनटाइम त्रुटियां
संकलन समय त्रुटियों को पुनः दो प्रकारों में वर्गीकृत किया जा सकता है:
- सिंटेक्स त्रुटियां
- अर्थगत त्रुटियाँ
वाक्यविन्यास त्रुटियाँ उदाहरण:
घोषित करने के बजाय int a;
आपने गलती से इसे घोषित कर दिया in a;
जिसके लिए कम्पाइलर एक त्रुटि फेंक देगा.
उदाहरण: आपने एक चर घोषित किया है int a;
और कोड की कुछ पंक्तियों के बाद आप फिर से एक पूर्णांक घोषित करते हैं int a;
जब आप कोड संकलित करते हैं तो ये सभी त्रुटियाँ हाइलाइट हो जाती हैं।
रनटाइम त्रुटियाँ उदाहरण
रनटाइम त्रुटि को कहा जाता है अपवाद त्रुटि। यह कोई भी घटना है जो प्रोग्राम निष्पादन के सामान्य प्रवाह को बाधित करती है। अपवादों के उदाहरण हैं, अंकगणितीय अपवाद, नलपॉइंटर अपवाद, शून्य से भाग अपवाद, आदि। अपवाद Java ये कुछ ऐसी चीजें हैं जो डेवलपर्स के नियंत्रण से बाहर हैं।
क्लिक करें यहाँ उत्पन्न करें यदि वीडियो उपलब्ध न हो
हमें अपवाद की आवश्यकता क्यों है?
मान लीजिए आपने सर्वर तक पहुंचने के लिए एक प्रोग्राम कोड किया है। कोड विकसित करते समय चीजें ठीक काम कर रही थीं।
वास्तविक उत्पादन रन के दौरान, सर्वर डाउन होता है। जब आपका प्रोग्राम इसे एक्सेस करने का प्रयास करता है, तो एक अपवाद उठाया जाता है।
अपवाद को कैसे संभालें
अब तक हमने देखा है कि अपवाद डेवलपर के नियंत्रण से बाहर है। लेकिन अपने कोड की विफलता के लिए पर्यावरण संबंधी मुद्दों को दोष देना कोई समाधान नहीं है। आपको एक मजबूत प्रोग्रामिंग की आवश्यकता है, जो असाधारण स्थितियों का ध्यान रखे। ऐसे कोड को कहा जाता है अपवाद हैंडलर.
हमारे उदाहरण में, अच्छा अपवाद प्रबंधन यह होगा कि जब सर्वर डाउन हो, तो बैकअप सर्वर से कनेक्ट करें।
इसे लागू करने के लिए, सर्वर से कनेक्ट करने के लिए अपना कोड दर्ज करें (पारंपरिक if और else शर्तों का उपयोग करके)। आप जाँचेंगे कि सर्वर डाउन है या नहीं। यदि हाँ, तो बैकअप सर्वर से कनेक्ट करने के लिए कोड लिखें। कोड का ऐसा संगठन, “if” और “else” लूप का उपयोग करना तब प्रभावी नहीं होता जब आपके कोड में कई हों जावा अपवाद से निपटने।
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
कैच ब्लॉक का प्रयास करें
Java एक अंतर्निहित असाधारण हैंडलिंग प्रदान करता है।
- सामान्य कोड एक में चला जाता है TRY ब्लॉक।
- अपवाद हैंडलिंग कोड में चला जाता है पकड़ो खंड
हमारे उदाहरण में, TRY ब्लॉक में सर्वर से कनेक्ट करने के लिए कोड होगा। CATCH ब्लॉक में बैकअप सर्वर से कनेक्ट करने के लिए कोड होगा। यदि सर्वर चालू है, तो CATCH ब्लॉक में कोड को अनदेखा कर दिया जाएगा। यदि सर्वर बंद है, तो अपवाद उठाया जाता है, और catch ब्लॉक में कोड निष्पादित किया जाएगा।
तो, इस तरह से अपवाद को संभाला जाता है Java.
Try और catch का उपयोग करने के लिए वाक्यविन्यास
try{ statement(s) } catch (exceptiontype name){ statement(s) }
उदाहरण
चरण 1) निम्नलिखित कोड को संपादक में कॉपी करें
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
चरण 2) फ़ाइल को सेव करें और कोड संकलित करें। कमांड, java का उपयोग करके प्रोग्राम चलाएँ Javaअपवाद
चरण 3) एक अंकगणितीय अपवाद - शून्य से भाग नीचे पंक्ति # 5 के लिए दिखाया गया है और पंक्ति # 6 कभी निष्पादित नहीं होती है
चरण 4) अब देखते हैं कि try और catch इस अपवाद को संभालने में हमारी किस तरह मदद करेंगे। हम अपवाद उत्पन्न करने वाली कोड लाइन को एक में डालेंगे कोशिश ब्लॉक, उसके बाद ए पकड़ ब्लॉक करें। निम्नलिखित कोड को एडिटर में कॉपी करें।
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
चरण 5) कोड को सेव करें, संकलित करें और चलाएं। आपको निम्नलिखित आउटपुट मिलेगा
जैसा कि आप देख रहे हैं, अपवाद को संभाला जाता है, और कोड की अंतिम पंक्ति भी निष्पादित की जाती है। साथ ही, ध्यान दें कि लाइन #7 निष्पादित नहीं की जाएगी क्योंकि जैसे ही कोई अपवाद उठाया जाता है, नियंत्रण का प्रवाह कैच ब्लॉक पर चला जाता है।
नोट: AritmeticException ऑब्जेक्ट “e” में घटित हुए अपवाद के बारे में जानकारी होती है, जो पुनर्प्राप्ति क्रियाएं करने में उपयोगी हो सकती है।
Java अपवाद वर्ग पदानुक्रम
एक कैच स्टेटमेंट के निष्पादित होने के बाद, अन्य को बायपास कर दिया जाता है, और try/catch ब्लॉक के बाद निष्पादन जारी रहता है। नेस्टेड कैच ब्लॉक अपवाद पदानुक्रम का पालन करते हैं।
- सभी अपवाद वर्ग Java 'Throwable' क्लास को आगे बढ़ाएँ। Throwable के दो उपवर्ग हैं, Error और Exception
- त्रुटि वर्ग अपवाद या समस्याओं को परिभाषित करता है जो हमारे प्रोग्राम द्वारा सामान्य परिस्थितियों में होने की उम्मीद नहीं है, उदाहरण मेमोरी त्रुटि, हार्डवेयर त्रुटि, JVM त्रुटि, आदि
- अपवाद वर्ग उन अपवादों का प्रतिनिधित्व करता है जिन्हें हमारे प्रोग्राम द्वारा नियंत्रित किया जा सकता है, और हमारे प्रोग्राम को try और catch ब्लॉक का उपयोग करके इस अपवाद से पुनर्प्राप्त किया जा सकता है
- रनटाइम अपवाद अपवाद वर्ग का एक उप-वर्ग है। इस प्रकार का अपवाद रन टाइम पर होने वाले अपवाद को दर्शाता है और जिसे संकलन समय पर ट्रैक नहीं किया जा सकता है। इसका एक बेहतरीन उदाहरण शून्य अपवाद से विभाजित अपवाद, या शून्य पॉइंटर अपवाद, आदि है
- इनपुट और आउटपुट संचालन के दौरान IO अपवाद उत्पन्न होता है
- बाधित अपवाद Java, एकाधिक थ्रेडिंग के दौरान उत्पन्न होता है।
उदाहरण: ट्राई और कैच ब्लॉकों की नेस्टिंग को समझना
चरण 1) निम्नलिखित कोड को संपादक में कॉपी करें।
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
चरण 2) फ़ाइल को सेव करें और कोड संकलित करें। कमांड का उपयोग करके प्रोग्राम चलाएं, जावा Javaअपवाद.
चरण 3) एक ArrayIndexOutOfBoundsException उत्पन्न होता है। int d का मान 0 में बदलें। कोड को सेव करें, संकलित करें और चलाएँ।
चरण 4) एक ArithmeticException उत्पन्न किया जाना चाहिए.
चरण 5) पंक्ति #10 से पंक्ति #12 तक की टिप्पणियाँ हटाएँ। कोड को सहेजें, संकलित करें और चलाएँ।
चरण 6) समेकन की त्रुटि? ऐसा इसलिए है क्योंकि Exception, ArithmeticException Exception का आधार वर्ग है। ArithmeticException द्वारा उठाया गया कोई भी Exception, Exception वर्ग द्वारा भी संभाला जा सकता है। इसलिए ArithmeticException के कैच ब्लॉक को कभी भी निष्पादित होने का मौका नहीं मिलेगा जो इसे अनावश्यक बनाता है। इसलिए संकलन त्रुटि।
Java अंत में ब्लॉक
अंततः ब्लॉक है अपवाद उठाए जाने के बावजूद निष्पादित किया गया try ब्लॉक में। यह है वैकल्पिक try ब्लॉक के साथ उपयोग करने के लिए.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
यदि try ब्लॉक में कोई अपवाद उत्पन्न होता है, तो catch ब्लॉक के निष्पादन के बाद finally ब्लॉक निष्पादित होता है।
उदाहरण
चरण 1) निम्नलिखित कोड को संपादक में कॉपी करें।
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
चरण 2) कोड को सहेजें, संकलित करें और चलाएं।
चरण 3) अपेक्षित आउटपुट। अंत में ब्लॉक निष्पादित किया जाता है, भले ही अपवाद उठाया गया हो।
चरण 4) चर d = 1 का मान बदलें। कोड को सेव करें, संकलित करें और चलाएँ तथा आउटपुट देखें। फॉर्म का निचला भाग
सारांश
- An अपवाद एक रन-टाइम त्रुटि है जो प्रोग्राम निष्पादन के सामान्य प्रवाह को बाधित करता है। प्रोग्राम के निष्पादन के दौरान व्यवधान को त्रुटि या अपवाद कहा जाता है।
- त्रुटियों को दो श्रेणियों में वर्गीकृत किया गया है
- संकलन समय त्रुटियाँ – वाक्यविन्यास त्रुटियाँ, अर्थगत त्रुटियाँ
- रनटाइम त्रुटियाँ- अपवाद
- A मजबूत प्रोग्राम को सभी अपवादों को संभालना चाहिए और कार्यक्रम निष्पादन का सामान्य प्रवाह जारी रहेगा। Java एक अंतर्निहित असाधारण हैंडलिंग विधि प्रदान करता है
- अपवाद हैंडलर कोड का एक सेट है जो अपवाद को संभालता हैअपवादों को संभाला जा सकता है Java try और catch का उपयोग करके.
- ब्लॉक का प्रयास करें: इस ब्लॉक पर सामान्य कोड चलता है।
- पकड़ ब्लॉक: यदि सामान्य कोड में कोई त्रुटि है, तो वह इस ब्लॉक में जाएगा