जावा में अपवाद क्या है?
जावा में अपवाद एक घटना है जो कार्यक्रम के निर्देशों के निष्पादन में बाधा डालती है और कार्यक्रम के निष्पादन के सामान्य प्रवाह को परेशान करती है। यह एक ऑब्जेक्ट है जो एक त्रुटि घटना की जानकारी को लपेटता है जो एक विधि के भीतर हुई और इसे रनटाइम सिस्टम में पास किया गया। जावा में, अपवाद मुख्य रूप से विभिन्न प्रकार की त्रुटि स्थितियों का संकेत देने के लिए उपयोग किया जाता है।
इस ट्यूटोरियल में, आप सीखेंगे-
- अपवाद क्या है?
- हमें अपवाद की आवश्यकता क्यों है?
- अपवाद को कैसे संभालें
- पकड़ो ब्लॉक की कोशिश करो
- जावा अपवाद वर्ग पदानुक्रम
- जावा अंत में ब्लॉक
त्रुटियों के दो प्रकार हैं:
- संकलन समय त्रुटियों
- रनटाइम त्रुटियों
संकलन समय त्रुटियों को फिर से दो प्रकारों में वर्गीकृत किया जा सकता है:
- सिंटैक्स त्रुटियां
- शब्दार्थ त्रुटियाँ
सिंटैक्स त्रुटियां उदाहरण:
घोषित करने के बजाय
int a;
आपने गलती से यह घोषित कर दिया था कि in a;
किस कंपाइलर से कोई त्रुटि आएगी।
उदाहरण: आपने एक चर घोषित किया है
int a;
और कोड की कुछ पंक्तियों के बाद आप फिर से पूर्णांक घोषित करते हैं int a;
। जब आप कोड संकलित करते हैं तो ये सभी त्रुटियां उजागर होती हैं।
रनटाइम त्रुटियां उदाहरण
रनटाइम त्रुटि को अपवाद त्रुटि कहा जाता है । यह किसी भी घटना है जो कार्यक्रम के निष्पादन के सामान्य प्रवाह को बाधित करता है।
अपवाद के लिए उदाहरण हैं, अंकगणित अपवाद, नलपॉइंट अपवाद, शून्य अपवाद से विभाजित, आदि।
जावा में अपवाद कुछ ऐसे हैं जो डेवलपर्स नियंत्रण से बाहर हैं।
यदि वीडियो उपलब्ध नहीं है तो यहां क्लिक करें
हमें अपवाद की आवश्यकता क्यों है?
मान लीजिए कि आपने सर्वर तक पहुंचने के लिए एक प्रोग्राम कोड किया है। जब आप कोड विकसित कर रहे थे तब चीजें ठीक थीं।
वास्तविक उत्पादन चलाने के दौरान, सर्वर नीचे है। जब आपके कार्यक्रम ने इसे एक्सेस करने की कोशिश की, तो एक अपवाद उठाया जाता है।
अपवाद को कैसे संभालें
अब तक हमने देखा है, अपवाद डेवलपर के नियंत्रण से परे है। लेकिन पर्यावरणीय मुद्दों पर अपनी कोड विफलता को दोष देना कोई समाधान नहीं है। आपको एक रोबोट प्रोग्रामिंग की आवश्यकता है, जो असाधारण स्थितियों का ख्याल रखता है। ऐसे कोड को अपवाद हैंडलर के रूप में जाना जाता है ।
हमारे उदाहरण में, अच्छा अपवाद हैंडलिंग, जब सर्वर डाउन होता है, तो बैकअप सर्वर से कनेक्ट करें।
इसे लागू करने के लिए, सर्वर से कनेक्ट करने के लिए अपना कोड दर्ज करें (पारंपरिक यदि और अन्य शर्तों का उपयोग करके)।
अगर सर्वर डाउन है तो आप चेक करेंगे। यदि हाँ, तो बैकअप सर्वर से कनेक्ट करने के लिए कोड लिखें।
कोड का ऐसा संगठन, "if" और "और" लूप का उपयोग करने पर प्रभावी नहीं होता है जब आपके कोड में कई जावा अपवादों को संभालना होता है।
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
पकड़ो ब्लॉक की कोशिश करो
जावा एक इनबिल्ट असाधारण हैंडलिंग प्रदान करता है।
- सामान्य कोड TRY ब्लॉक में जाता है ।
- अपवाद हैंडलिंग कोड CATCH ब्लॉक में चला जाता है
हमारे उदाहरण में, TRY ब्लॉक में सर्वर से जुड़ने के लिए कोड होगा। CATCH ब्लॉक में बैकअप सर्वर से जुड़ने के लिए कोड होगा।
यदि सर्वर चालू है, तो 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) फ़ाइल सहेजें और कोड संकलित करें। कमांड, जावा JavaException का उपयोग करके प्रोग्राम को रन करें
चरण 3) एक अंकगणित अपवाद - शून्य से विभाजित रेखा # 5 के लिए नीचे दिखाया गया है और पंक्ति # 6 कभी निष्पादित नहीं होती है
चरण 4) अब आइए देखें कि इस अपवाद को संभालने के लिए कैसे प्रयास और पकड़ हमें मदद करेंगे। हम अपवाद एक में कोड की लाइन के कारण रखा जाएगा कोशिश ब्लॉक, एक के बाद पकड़ ब्लॉक। निम्नलिखित कोड को संपादक में कॉपी करें।
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 Object "e" उस अपवाद के बारे में जानकारी रखता है जो घटित हुआ है जो पुनर्प्राप्ति क्रिया करने में उपयोगी हो सकता है।
जावा अपवाद वर्ग पदानुक्रम
एक कैच स्टेटमेंट निष्पादित होने के बाद, अन्य को बायपास कर दिया जाता है, और कोशिश / कैच ब्लॉक के बाद निष्पादन जारी रहता है। नेस्टेड पकड़ ब्लॉक अपवाद पदानुक्रम का पालन करते हैं।- जावा में सभी अपवाद वर्ग 'थ्रोएबल' श्रेणी का विस्तार करते हैं। थ्रेडेबल में दो उपवर्ग, त्रुटि और अपवाद हैं
- त्रुटि वर्ग अपवाद या उन समस्याओं को परिभाषित करता है जो हमारे कार्यक्रम द्वारा सामान्य परिस्थितियों में होने की उम्मीद नहीं है, उदाहरण मेमोरी त्रुटि, हार्डवेयर त्रुटि, जेवीएम त्रुटि, आदि।
- अपवाद वर्ग हमारे कार्यक्रम द्वारा नियंत्रित किए जा सकने वाले अपवादों का प्रतिनिधित्व करता है, और हमारे कार्यक्रम को इस अपवाद से पुनर्प्राप्त किया जा सकता है, कोशिश और पकड़ ब्लॉक
- एक रनटाइम अपवाद अपवाद वर्ग का एक उप-वर्ग है। इन प्रकारों का अपवाद रन टाइम पर होने वाले अपवाद को दर्शाता है और जिसे संकलन समय पर ट्रैक नहीं किया जा सकता है। उसी का एक उत्कृष्ट उदाहरण शून्य अपवाद या अशक्त सूचक अपवाद आदि द्वारा विभाजित है
- IO अपवाद इनपुट और आउटपुट संचालन के दौरान उत्पन्न होता है
- जावा में बाधित अपवाद, एकाधिक थ्रेडिंग के दौरान उत्पन्न होता है।
चरण 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) फ़ाइल सहेजें और कोड संकलित करें। कमांड, जावा JavaException का उपयोग करके प्रोग्राम को रन करें ।
चरण 3) एक ArrayIndexOutOfBoundsException उत्पन्न होता है। कोड के लिए int d का मान 0. सहेजें, संकलित करें और चलाएँ।
चरण 4 ) एक अंकगणित अपवाद उत्पन्न किया जाना चाहिए।
चरण 5) Uncomment लाइन # 10 से लाइन # 12। कोड सहेजें, संकलित करें और चलाएँ।
चरण 6) संकलन त्रुटि? ऐसा इसलिए है क्योंकि अपवाद ArithmeticException अपवाद का आधार वर्ग है। ArithmeticException द्वारा उठाए गए किसी भी अपवाद को अपवाद वर्ग द्वारा भी संभाला जा सकता है। ArithmeticException के कैच ब्लॉक को कभी भी निष्पादित करने का मौका नहीं मिलेगा, जो इसे निरर्थक बनाता है। इसलिए संकलन त्रुटि।
जावा अंत में ब्लॉक
अंततः ब्लॉक को ब्लॉक में उठाए गए अपवाद के बावजूद निष्पादित किया जाता है । यह एक कोशिश ब्लॉक के साथ उपयोग करने के लिए वैकल्पिक है।
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
मामले में, प्रयास ब्लॉक में एक अपवाद उठाया जाता है, आखिरकार ब्लॉक को निष्पादित करने के बाद ब्लॉक को निष्पादित किया जाता है।
उदाहरण
चरण 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. मान को सहेजें, कोड संकलित करें और चलाएँ और आउटपुट का अवलोकन करें। प्रपत्र का आधार
सारांश :
- एक अपवाद एक रन-टाइम त्रुटि है जो प्रोग्राम के निष्पादन के सामान्य प्रवाह को बाधित करता है। प्रोग्राम के निष्पादन के दौरान होने वाली गड़बड़ी को त्रुटि या अपवाद के रूप में संदर्भित किया जाता है।
- त्रुटियों को दो श्रेणियों में वर्गीकृत किया गया है
- संकलन समय त्रुटियाँ - सिंटैक्स त्रुटियां, सिमेंटिक त्रुटियां
- रनटाइम त्रुटियाँ- अपवाद
- एक मजबूत कार्यक्रम को सभी अपवादों को संभालना चाहिए और कार्यक्रम निष्पादन के अपने सामान्य प्रवाह के साथ जारी रखना चाहिए । जावा एक इनबिल्ट असाधारण हैंडलिंग विधि प्रदान करता है
- अपवाद हैंडलर कोड का एक सेट है जो एक अपवाद को संभालता है । अपवादों को जावा में कोशिश और कैच का उपयोग करके नियंत्रित किया जा सकता है।
- ब्लॉक को आज़माएँ : इस ब्लॉक पर सामान्य कोड चलता है।
- कैच ब्लॉक : यदि सामान्य कोड में त्रुटि है, तो यह इस ब्लॉक में जाएगा