java exceptions exception handling with examples
जावा अपवाद पर यह वीडियो ट्यूटोरियल जावा में अपवाद हैंडलिंग के बारे में बताता है। आप अपवाद पदानुक्रम, प्रकार, वर्ग विधि और अधिक के बारे में जानेंगे:
जब हम जावा प्रोग्राम निष्पादित कर रहे होते हैं, तो कुछ अप्रत्याशित घटनाओं के कारण प्रोग्राम का सामान्य व्यवहार या सामान्य प्रवाह बाधित होता है।
उदाहरण के लिए, हम डेटा पढ़ने के लिए एक फ़ाइल खोलते हैं। जब ओपन फ़ाइल कॉल निष्पादित की जाती है, तो हम पाते हैं कि जिस फ़ाइल को हम खोलने की कोशिश कर रहे हैं वह गायब है। इससे प्रोग्राम के सामान्य प्रवाह में रुकावट आती है।
कार्यक्रम के सामान्य प्रवाह को प्रभावित या बाधित करने वाली इस घटना को 'कहा जाता है' अपवाद ”।
=> सभी के लिए जावा प्रशिक्षण श्रृंखला का अन्वेषण करने के लिए यहां जाएं।
जावा एक्सेप्शन को हैंडल करने पर यहां एक वीडियो ट्यूटोरियल है:
आप क्या सीखेंगे:
जावा में अपवाद हैंडलिंग
जब प्रोग्राम में कोई अपवाद होता है, तो प्रोग्राम निष्पादन समाप्त हो जाता है। चूंकि यह एक अचानक समाप्ति है, सिस्टम एक संदेश उत्पन्न करता है और इसे प्रदर्शित करता है। सिस्टम द्वारा उत्पन्न संदेश कुछ कोड या अपठनीय की तरह गूढ़ हो सकता है।
इस प्रकार सामान्य उपयोगकर्ता को यह समझना चाहिए कि कार्यक्रम ने अचानक इसके निष्पादन को क्यों रोक दिया, उसे कारण जानना चाहिए। अपवाद के परिणामस्वरूप संदेश जनरेट नहीं हो सकता है। जावा में, हम अपवाद को संभाल सकते हैं और समस्या के बारे में उपयोगकर्ता को सार्थक संदेश प्रदान कर सकते हैं।
अपवाद के इस हैंडलिंग, आमतौर पर के रूप में जाना जाता है 'संचालन अपवाद' जावा प्रोग्रामिंग की मुख्य विशेषताओं में से एक है।
कारण के लिए अपवाद के कारण
हमारे पास विभिन्न कारण हो सकते हैं जिनके कारण अपवाद हो सकते हैं। यदि इनपुट से संबंधित इसका अपवाद है, तो इसका कारण यह हो सकता है कि इनपुट डेटा गलत या अपठनीय है।
यदि हमें फ़ाइल I / O के लिए अपवाद मिलता है, तो यह बहुत संभव है कि जिन फ़ाइलों के साथ हम काम कर रहे हैं, वे मौजूद नहीं हैं। किसी अन्य समय में, नेटवर्क समस्याएँ, प्रिंटर उपलब्ध नहीं होना या कार्य करना, आदि त्रुटियां हो सकती हैं।
एक कार्यक्रम में, अपवादों के अलावा, हमें त्रुटियाँ भी मिलती हैं। इस प्रकार, अपवादों को प्रभावी ढंग से संभालने के लिए, हमें त्रुटि और एक अपवाद के बीच के अंतर के बारे में पता होना चाहिए।
बाकी और साबुन वेब सेवाएं साक्षात्कार प्रश्न
एक त्रुटि एप्लिकेशन के साथ अधिक गंभीर समस्या को इंगित करती है और एप्लिकेशन को इसे पकड़ने का प्रयास नहीं करना चाहिए। इसके विपरीत, अपवाद एक ऐसी स्थिति है जिसे कोई भी उचित अनुप्रयोग पकड़ने की कोशिश करेगा।
इस प्रकार अनुप्रयोग में कोई त्रुटि अधिक गंभीर होती है और जब कोई त्रुटि आती है तो अनुप्रयोग क्रैश हो जाते हैं। दूसरी ओर अपवाद कोड में होते हैं और प्रोग्रामर द्वारा सुधारात्मक कार्रवाई प्रदान करके नियंत्रित किए जा सकते हैं।
अपवाद हैंडलिंग क्या है?
जावा में एक्सेप्शन हैंडलिंग एक ऐसा तंत्र है जिसके उपयोग से एप्लिकेशन का सामान्य प्रवाह बनाए रखा जाता है। ऐसा करने के लिए, हम एक प्रोग्राम में रनटाइम त्रुटियों या अपवादों को संभालने के लिए एक शक्तिशाली तंत्र को नियोजित करते हैं।
अपवाद को संभालने के लिए उपयोग किए जाने वाले कोड के एक अनुक्रम को 'अपवाद हैंडलर' कहा जाता है। अपवाद होने पर एक अपवाद हैंडलर उस बिंदु पर संदर्भ से पूछताछ करता है। इसका मतलब यह है कि यह चर मानों को पढ़ता है जो अपवाद में थे जबकि अपवाद हुआ और फिर सामान्य प्रवाह के साथ जारी रखने के लिए जावा प्रोग्राम को पुनर्स्थापित करता है।
अपवाद हैंडलिंग के लाभ
अपवाद संचालन का प्रमुख लाभ यह है कि यह अपवाद की घटना के बावजूद आवेदन के सामान्य प्रवाह को बनाए रखता है। जब कोई अपवाद होता है, तो प्रोग्राम आमतौर पर अचानक समाप्त हो जाता है।
एक कार्यक्रम में एक अपवाद हैंडलर होने से कार्यक्रम अचानक समाप्त नहीं होगा। इसके बजाय, एक अपवाद हैंडलर यह सुनिश्चित करता है कि कार्यक्रम के सभी बयानों को सामान्य रूप से निष्पादित किया जाता है और कार्यक्रम का प्रवाह अचानक नहीं टूटता है।
जावा में अपवाद पदानुक्रम
नीचे दिए गए चित्र में जावा में अपवाद पदानुक्रम दिखाया गया है। Java.lang.Throwable (ऑब्जेक्ट क्लास का वंशज) जावा एक्सेप्शन का रूट क्लास है। कक्षाएं अपवाद और त्रुटि इस वर्ग से ली गई हैं।
अपवाद वर्ग अन्य सभी अपवादों के लिए आधार वर्ग है।
नीचे दिए गए जावा में अपवाद श्रेणी का एक पदानुक्रम है जो सभी प्रमुख अपवादों को सूचीबद्ध करेगा जो एक जावा प्रोग्रामर को पता होना चाहिए।
जावा में अपवाद कक्षा
जैसा कि पदानुक्रम आरेख में देखा जाता है, कक्षा थ्ररेबल में दो प्रत्यक्ष उपवर्ग होते हैं यानी अपवाद और त्रुटि। बाहरी स्रोत से उत्पन्न अपवादों को अपवाद वर्ग में वर्णित किया गया है।
एक्सेप्शन क्लास कंस्ट्रक्टर्स को थ्रोएबल क्लास के रूप में घोषित करता है और प्रत्येक कंस्ट्रक्टर का इनवोकेशन भी अपने थ्रोवर्स समकक्ष को आमंत्रित करता है। अपवाद वर्ग अपने तरीकों की घोषणा नहीं करता है, यह थ्रोबेबल वर्ग विधियों को विरासत में मिला है।
अपवाद वर्ग और विधियाँ जिनका उपयोग अपवाद वर्ग नीचे प्रस्तुत करता है।
कंस्ट्रक्टर्स
निर्माता विवरण सार्वजनिक अपवाद () एक डिफ़ॉल्ट निर्माता जो संदेश के साथ एक नए अपवाद का निर्माण करता है अशक्त। सार्वजनिक अपवाद (स्ट्रिंग संदेश) दिए गए संदेश के साथ एक नए अपवाद का निर्माण करने वाला। इस स्थिति में, कारण को प्रारंभ नहीं किया जाता है, और कारण को प्रारंभ करने के लिए Throwable.initCause (java.lang.Throwable) के बाद के कॉल का उपयोग किया जा सकता है। सार्वजनिक अपवाद (स्ट्रिंग संदेश, फेंकने योग्य कारण) दिए गए संदेश और कारण का उपयोग करके एक नया अपवाद बनाता है। सार्वजनिक अपवाद (फेंकने का कारण) दिए गए कारण और दिए गए संदेश के साथ एक नया अपवाद बनाता है (कारण == null; null: reason.toString ()) (जिसमें आमतौर पर वर्ग और कारण का विस्तार संदेश होता है)। संरक्षित अपवाद (स्ट्रिंग संदेश, फेंकने योग्य कारण, बूलियन सक्षम करेंसमूह, बूलियन लिखने योग्य स्टैकट्रेस) दिए गए संदेश, कारण, दमन (सक्षम या अक्षम), और लिखने योग्य स्टैक ट्रेस (सक्षम या अक्षम) के साथ एक नया अपवाद बनाता है।
तरीकों
विधि प्रोटोटाइप | विवरण |
---|---|
सार्वजनिक स्ट्रिंग getMessage () | अपवाद के बारे में एक विस्तृत संदेश प्राप्त करें। |
सार्वजनिक फेंकने योग्य getCause () | एक फेंकने योग्य वस्तु द्वारा प्रतिनिधित्व अपवाद का कारण प्राप्त करें |
सार्वजनिक स्ट्रिंग toString () | GetMessage () के परिणाम के साथ वर्ग का नाम सम्मिलित करता है और परिणामी स्ट्रिंग लौटाता है। |
सार्वजनिक शून्य प्रिंटस्ट्रेस () | StSt का परिणाम () और स्टैक ट्रेस की सामग्री को त्रुटि आउटपुट स्ट्रीम, System.err पर प्रिंट करता है। |
सार्वजनिक StackTraceElement [] getStackTrace () | एक सरणी के रूप में स्टैक ट्रेस में प्रत्येक तत्व प्राप्त करें। |
सार्वजनिक फेंकने योग्य fillInStackTrace () | स्टैक ट्रेस को वर्तमान स्टैक ट्रेस से भरें। |
अपवाद उदाहरण
अगला, हम एक बुनियादी अपवाद उदाहरण प्रदर्शित करने के लिए एक जावा प्रोग्राम प्रस्तुत करते हैं। यहां हम एक शून्य मान के लिए आरंभिक स्ट्रिंग चर प्रदान करते हैं। जब हम इस चर को प्रिंट करने का प्रयास करते हैं, तो एक अपवाद को फेंक दिया जाता है क्योंकि स्ट्रिंग मान शून्य नहीं हो सकता है।
class Main { public static void main(String args[]){ //declare a String variable and initialize it to null String myStr = null; //print the string System.out.println(myStr.length()); } }
उत्पादन
जावा में अपवाद के प्रकार
जावा तीन प्रकार के अपवादों का समर्थन करता है:
- अपवाद की जाँच की
- अनियंत्रित अपवाद
- त्रुटि
इस खंड में, हम उपरोक्त सभी तीन प्रकारों पर चर्चा करेंगे।
(1) जाँच अपवाद
जब कोड संकलित किया जाता है तो कुछ अपवाद संकलन-समय पर जांचे जाते हैं। ये 'जाँच अपवाद' हैं। जावा प्रोग्राम एक संकलन त्रुटि को फेंकता है जब यह पाता है कि प्रोग्राम के अंदर कोड त्रुटि-प्रवण है।
चेक-अप अपवाद द्वारा फेंके गए संकलनों को हम या तो प्रयास कर सकते हैं, अपवादों को संभालकर या कोड को एक कोशिश-ब्लॉक में संलग्न करके या थ्रो कीवर्ड का उपयोग करके।
अपवाद पदानुक्रम में, वर्ग सीधे IOException, ClassNotFoundException, जैसे थ्रोएबल क्लास को इनहेरिट करता है, सभी वर्गों को छोड़कर सभी जाँच अपवाद हैं RuntimeException और Error। ये अनियंत्रित अपवाद हैं।
निम्न जावा प्रोग्राम चेक किए गए अपवादों, FileNotFoundException और IOException को प्रदर्शित करता है। इस कार्यक्रम में, हम एक गैर-मौजूदा फ़ाइल खोलने और उससे पढ़ने की कोशिश करते हैं।
चूंकि फ़ाइल मौजूद नहीं है, खुली फ़ाइल विधि FileNotFoundException को फेंकता है। अगला, जब हम फ़ाइल की सामग्री को पढ़ने और फ़ाइल को बंद करने का प्रयास करते हैं, तो विधियाँ IOException को फेंकती हैं।
import java.io.*; class Main { public static void main(String args[]) { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
उत्पादन
उपरोक्त आउटपुट में, चूंकि अपवाद हैंडलर अनुपस्थित है, हमें चेक किए गए अपवादों के लिए संकलन त्रुटियां मिलती हैं।
अब हम इस कार्यक्रम के लिए एक थ्रो क्लाज प्रदान करते हैं। FileNotFoundException के जनक IOException हैं, हम थ्रोज़ क्लॉज़ के बाद IOException को निर्दिष्ट करेंगे।
import java.io.*; class Main { public static void main(String args[]) throws IOException { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
उत्पादन
जैसा कि आउटपुट से देखा जाता है, जब हम अपवाद को संभालते हैं, तो यह संकलन त्रुटियों के बजाय अधिक सार्थक आउटपुट प्रदान करता है।
# 2) अनियंत्रित अपवाद
अनियंत्रित अपवाद अपवाद हैं जिन्हें रन टाइम पर जांचा जाता है। इसलिए अपवादों के बावजूद, कार्यक्रमों का एक संकलन सफल होगा। अधिकांश अनियंत्रित अपवाद कार्यक्रम में उपयोग किए जाने वाले खराब डेटा के कारण फेंके गए हैं।
'RuntimeException' विरासत में मिली कक्षाएं अनियंत्रित अपवाद हैं। अपवाद जैसे ArrayIndexOutofBounds अपवाद, ArithmeticException, NullPOinterException, आदि अनियंत्रित अपवादों के उदाहरण हैं।
निम्न प्रोग्राम एक रनटाइम अनियोजित अपवाद प्रदर्शित करता है जो किसी संख्या को शून्य से विभाजित करने के कारण होता है।
class Main { public static void main(String args[]) { int num1=10; int num2=0; //divide both numbers and print the result int result=num1/num2; System.out.println(result); } }
उत्पादन
हम देखते हैं कि प्रोग्राम को सफलतापूर्वक संकलित किया गया है और फिर रनटाइम पर ArithmeticException को फेंक दिया गया है।
अनियंत्रित अपवाद के उदाहरण:
- सीमा अपवाद के बाहर सरणी सूचकांक
- शून्य सूचक अपवाद
- अवैध तर्क अपवाद
- नंबरफर्माटैक्स अपवाद
उपरोक्त दो अपवादों के अलावा, कुछ और जाँच अपवाद भी शामिल हैं:
- SQLException
- InvocationTargetExecption
# 3) गलती
त्रुटि आमतौर पर एक कार्यक्रम में अपरिवर्तनीय और अपरिवर्तनीय स्थिति होती है और जब कोई त्रुटि होती है, तो प्रोग्राम क्रैश हो जाता है। एक प्रोग्राम में त्रुटियों के कुछ उदाहरण हैं OutOMemoryError, AssertionError, और VirtualMachineError, आदि।
थ्रॉटेबल क्लास से एरर क्लास विरासत में मिलती है। त्रुटि एक ऐसी स्थिति का वर्णन करती है जिसे संभाला नहीं जा सकता है और कार्यक्रम दुर्घटनाग्रस्त हो जाता है।
इस अनुभाग में त्रुटि के उदाहरण के रूप में आउटऑफ़मैरी त्रुटि पर चर्चा करें।
हम जानते हैं कि जावा में सभी वस्तुओं को नए ऑपरेटर का उपयोग करके आवंटित किया जाता है और ढेर पर संग्रहीत किया जाता है। जब हीप मेमोरी से बाहर जाता है, तो जावा वर्चुअल मशीन (JVM) ऑब्जेक्ट को आवंटित नहीं कर सकता है। उसी समय, कचरा संग्रहकर्ता किसी भी मेमोरी को मुक्त नहीं कर सकता है। यह स्थिति OutOfMemory त्रुटि को जन्म देती है।
Java में OutOfMemoryError जैसा कि नीचे दिखाया गया है:
'exception in thread 'main' java.lang.outofmemoryerror: java heap space'
किसी प्रोग्राम में OutOfMemoryError की उपस्थिति का अर्थ है कि या तो बहुत अधिक डेटा संसाधित किया जा रहा है या ऑब्जेक्ट्स को बहुत लंबे समय तक रखा जा रहा है। कभी-कभी, यह तीसरे पक्ष का पुस्तकालय भी हो सकता है जो मेमोरी का उपयोग करता है।
आउटऑफमेमोरीयर के कारण
(1) जावा हीप स्पेस
यदि किसी एप्लिकेशन में बहुत अधिक फ़ाइनलाइज़र हैं, तो फ़ाइनलीज़ विधि वाले क्लास ऑब्जेक्ट्स को तुरंत कचरा संग्रहकर्ता द्वारा पुनः प्राप्त नहीं किया जाता है, लेकिन बाद में अंतिम रूप देने के लिए कतारबद्ध किया जाता है। कभी-कभी, अंतिमकरण समय के साथ नहीं रह सकता है, और OutOfMemoryError में परिणामस्वरूप ढेर मेमोरी भर जाती है।
OutOfMemoryError का एक और कारण यह है कि निर्दिष्ट ढेर का आकार आवेदन के लिए अपर्याप्त हो सकता है।
निम्न कोड OutOfMemoryError दर्शाता है जो किसी सरणी के लिए घोषित किए गए विशाल डेटा आकार के कारण हो सकता है।
import java.util.*; public class Main { static List list = new ArrayList(); public static void main(String args[]) throws Exception { Integer[] array = new Integer[100000 * 100000]; } }
उत्पादन
# 2) पर्मगेन स्पेस
मेमोरी में स्थायी पीढ़ी क्षेत्र भी समाप्त हो सकता है और आउटऑफमैमोरी त्रुटि उत्पन्न कर सकता है।
PermGen क्षेत्र का आकार JVM लॉन्च के दौरान सेट किया गया है। यदि उपयोगकर्ता आकार सेट नहीं करता है, तो प्लेटफ़ॉर्म-विशिष्ट का डिफ़ॉल्ट आकार उपयोग किया जाता है।
यद्यपि उपरोक्त दोनों आमतौर पर आउटऑफमेरी ईयरराइड की घटना के मुख्य कारण हैं, लेकिन इसके अन्य कारण भी हो सकते हैं जैसे कि एरे का आकार वीएम सीमा से अधिक होना, आदि।
जावा में अपवादों की सूची
नीचे दिए गए प्रमुख अपवादों की एक सूची है जो जावा में होती है। हमने इनमें से कुछ अपवादों के लिए प्रोग्रामिंग उदाहरण प्रदान किए हैं। ध्यान दें कि ये जावा द्वारा समर्थित अपवाद हैं।
# 1) अंकगणित: अंकगणित की असामान्यताएं जैसे ArithmeticException में शून्य परिणामों से विभाजित होती हैं।
नीचे का कार्यक्रम अंकगणित की घटना को प्रदर्शित करता है।
class Main { public static void main(String args[]) { try { //define two numbers int num1 = 100, num2 = 0; int result = num1 / num2; // divide by zero //print the result System.out.println('Result = ' + result); } catch (ArithmeticException e) { System.out.println('ArithmeticException:Division by Zero'); } } }
उत्पादन
# 2) ArrayIndexOutOfBoundsException: ArrayIndexOutOfBoundsException को तब फेंक दिया जाता है जब कोई सरणी तत्व किसी गैर-कानूनी इंडेक्स का उपयोग करके एक्सेस किया जाता है। उपयोग किया गया सूचकांक या तो सरणी के आकार से परे है या नकारात्मक है।
# 3) ClassNotFoundException: यदि वर्ग परिभाषा नहीं मिली है, तो ClassNotFoundException को उठाया गया है।
# 4) FileNotFoundException: FileNotFoundException तब दी जाती है जब फ़ाइल मौजूद नहीं होती है या नहीं खुलती है।
# 5) IOException: इनपुट-आउटपुट ऑपरेशन विफल होने या बाधित होने पर IOException को फेंक दिया जाता है।
# 6) रुकावट जब भी कोई धागा प्रसंस्करण या सो रहा है या प्रतीक्षा कर रहा है, तो उसे बाधित किया जाता है InterruptedException को फेंकने से।
# 7) NoSuchFieldException: यदि किसी वर्ग में एक निर्दिष्ट फ़ील्ड या चर नहीं है, तो वह NoSuchFieldException को फेंकता है।
# 8) NoSuchMethodException: जब एक्सेस की जा रही विधि नहीं मिलती है, तो NoSuchMethodException को उठाया जाता है।
# 9) NullPointerException: NullPointerException को तब उठाया जाता है जब किसी नल ऑब्जेक्ट को रेफर किया जाता है। यह जावा में सबसे महत्वपूर्ण और सबसे आम अपवाद है।
# 10) नंबरफ़ॉर्मेट अपवाद: यह अपवाद तब उठाया जाता है जब कोई विधि किसी स्ट्रिंग को संख्यात्मक प्रारूप में परिवर्तित नहीं कर सकती है।
# 11) RuntimeException: रनटाइम पर होने वाला कोई भी अपवाद RuntimeException है।
# 12) StringIndexOutOfBoundsException: StringIndexOutOfBoundsException स्ट्रिंग वर्ग द्वारा फेंका गया है और इंगित करता है कि अनुक्रमणिका स्ट्रिंग ऑब्जेक्ट के आकार से परे है या नकारात्मक है।
# 13) EOFException: EOFException java.io पैकेज का एक हिस्सा है और फाइल के अंत तक पहुंचने पर इसे फेंक दिया जाता है और फ़ाइल को पढ़ा जा रहा है।
# 14) गैर-कानूनी मान्यता: अवैध या अमान्य तर्क को विधि में पारित किए जाने पर IllegalArgumentException को फेंक दिया जाता है। उदाहरण के लिए, गलत डेटा प्रारूप, अशक्त मान जब गैर-शून्य की आवश्यकता होती है या सीमा तर्क से बाहर होती है।
नीचे दिए गए जावा प्रोग्राम अवैध प्रदर्शन को दर्शाता है।
public class Main { int m; public static void setMarks(int marks) public static void main(String[] args) { setMarks(45); setMarks(101); } }
उत्पादन
उपरोक्त कार्यक्रम में, IllegalArgumentException को दूसरी कॉल में सेटमैक्स फ़ंक्शन में फेंक दिया जाता है, जहां हम उन निशान में प्रवेश करते हैं जो सीमा से बाहर हैं (> 45)।
# 15) InputMismatchException: जब इनपुट रीड निर्दिष्ट पैटर्न से मेल नहीं खाता है तब InputMismatchException को फेंक दिया जाता है। उदाहरण के लिए, यदि प्रोग्राम पूर्णांक की अपेक्षा करता है और एक फ्लोट पढ़ता है, तो InputMismatchException को उठाया जाता है।
# 16) NoSuchElementException: NoSuchElementException को फेंक दिया जाता है जब अगला तत्व एक्सेस होता है।
उदाहरण के लिए, एन्यूमरेशन में, नेक्स्ट एलिमेंट () मेथड को एलिमेंटेशन में अगले एलिमेंट को एक्सेस करने के लिए उपयोग किया जाता है। यदि तत्व मौजूद नहीं है, तो NoSuchElementException को फेंक दिया जाता है। ज्यादातर जावा कलेक्शंस इस अपवाद को फेंक देते हैं।
नीचे दिया गया कार्यक्रम यह प्रदर्शित करता है।
import java.util.*; public class Main { public static void main(String[] args) { Set hash_Set = new HashSet(); //create an empty hashSet. //This throws NoSuchElementException since hashSet is empty hash_Set.iterator().next(); } }
उत्पादन
# 17) समवर्ती ConcurrentModificationException आमतौर पर संग्रह कक्षाओं द्वारा फेंक दिया जाता है। जब ऑब्जेक्ट किसी संसाधन को समवर्ती रूप से संशोधित करने का प्रयास करते हैं तो यह अपवाद फेंक दिया जाता है।
उदाहरण के लिए, जब कोई थ्रेड इसे एक्सेस कर रहा होता है तो एक थ्रेड एक संग्रह को संशोधित नहीं कर सकता है। यदि हम दो धागे की अनुमति देते हैं, तो वे दोनों एक साथ संग्रह तक पहुंचेंगे, और असंगतियां होंगी।
निम्न उदाहरण ConcurrentModificationException प्रदर्शित करता है।
import java.awt.List; import java.util.*; public class Main { public static void main(String[] args) { ArrayList A_list = new ArrayList<>(); //add elements to the ArrayList A_list.add(10); A_list.add(20); A_list.add(30); Iterator it = A_list.iterator(); while (it.hasNext()) { Integer value = it.next(); System.out.println('ArrayList Value:' + value); if (value.equals(30)) A_list.remove(value); } } }
उत्पादन
उपरोक्त कार्यक्रम में, जबकि ArrayList मुद्रित किया जा रहा है, हम एक ही समय में एक तत्व को हटाने की कोशिश करते हैं। यह समवर्ती पहुंच है और इस तरह एक अपवाद फेंक दिया गया है।
जावा में कस्टम अपवाद
अब तक हमने उन सभी अपवादों पर चर्चा की है जो जावा भाषा द्वारा निर्मित या प्रदान किए गए हैं। इन अपवादों के अलावा, हम अपने स्वयं के अपवादों को भी परिभाषित कर सकते हैं। इन्हें कस्टम अपवाद या उपयोगकर्ता द्वारा परिभाषित अपवाद कहा जाता है।
कस्टम अपवादों का उपयोग करते हुए, हम अपनी आवश्यकताओं के अनुसार अपने अपवादों को परिभाषित कर सकते हैं।
निम्न उदाहरण कस्टम अपवाद दिखाता है जिसे हमने एक पूर्णांक मान के लिए परिभाषित किया था।
//custom exception definition class InvalidValueException extends Exception{ InvalidValueException(String s){ super(s); } } class Main{ static void validate(int int_val)throws InvalidValueException{ if(int_val<10) //value is valid if> 10 else throw exception throw new InvalidValueException('Invalid value'); else System.out.println('This is valid integer'); } public static void main(String args[]){ try{ validate(9); }catch(Exception m){System.out.println('Exception occured: '+m);} System.out.println('Code after Exception'); } }
उत्पादन
बार बार पूछे जाने वाले प्रश्न
Q # 1) अपवाद से आपका क्या अभिप्राय है?
उत्तर: एक कार्यक्रम के निष्पादन के दौरान होने वाली घटना और कार्यक्रम के सामान्य निष्पादन प्रवाह को बाधित करता है जिसे अपवाद कहा जाता है। अपवाद अवांछित और अप्रत्याशित है और बाहरी कारकों या प्रोग्रामिंग त्रुटियों के कारण हो सकता है।
Q # 2) त्रुटि और अपवाद के बीच अंतर क्या है?
उत्तर: अपवाद ऐसी घटनाएं हैं जो कार्यक्रम के सामान्य प्रवाह को बाधित करती हैं। हम अपने कार्यक्रम में अपवादों को संभाल सकते हैं और कार्यक्रम को सामान्य रूप से जारी रख सकते हैं। एक त्रुटि एक अपरिवर्तनीय घटना है जिसे संभाला नहीं जा सकता है और कार्यक्रम को समाप्त कर सकता है।
Q # 3) एक्सेप्शन हैंडलिंग से आपका क्या अभिप्राय है?
उत्तर: अपवाद को संभालने के लिए एक कार्यक्रम में चरणों के अनुक्रम को निर्दिष्ट करने की प्रक्रिया को अपवाद हैंडलिंग कहा जाता है। एक कार्यक्रम में अपवाद हैंडलर प्रदान करके, हम कार्यक्रम के सामान्य प्रवाह को सुनिश्चित कर सकते हैं।
Q # 4) जावा में एक्सेप्शन हैंडलिंग के क्या फायदे हैं?
उत्तर: अपवाद हैंडलिंग का उपयोग करके हम किसी एप्लिकेशन के निष्पादन के सामान्य प्रवाह को बनाए रख सकते हैं। जब हम अपवाद हैंडलर प्रदान करते हैं, तो हम कॉल स्टैक में त्रुटियों का प्रचार भी कर सकते हैं।
क्यू # 5) अपवाद हैंडलिंग का उपयोग क्या है?
उत्तर: किसी अनुप्रयोग के निष्पादन के सामान्य प्रवाह को समाप्त नहीं करना एक कार्यक्रम में अपवाद हैंडलर होने का प्रमुख उपयोग है। अपवाद संचालकों के बिना, कार्यक्रम समाप्त हो जाएगा और अपवाद होने पर सामान्य निष्पादन प्रवाह बाधित हो जाएगा।
अपवाद को प्रोग्राम में ठीक से हैंडल करने के साथ, अपवाद होने पर भी यह अपने सामान्य निष्पादन के साथ जारी रह सकता है।
अपवाद पर अधिक उदाहरण
एक अपवाद एक ऐसी घटना है जो प्रोग्राम के चलने के दौरान होती है और यह प्रोग्राम के निष्पादन को बाधित करती है। जिसकी वजह से सॉफ्टवेयर प्रोडक्ट अचानक खत्म हो जाएगा।
जब यह अपवाद होता है, तो जावा एक त्रुटि संदेश और वर्ग के बारे में जानकारी के साथ एक ऑब्जेक्ट बनाता है। यह अपवाद वस्तु है।
हमें जावा में अपवाद की आवश्यकता क्यों है?
अपवाद के बिना कक्षा ExcepDemo:
public class ExcepDemo { public static void main(String[] args) { int i=5; int j=0; System.out.println(i/j); System.out.println('statement after division'); } }
OUTPUT:
अपवाद से निपटने के साथ कक्षा ExcepDemo:
public class ExcepDemo { public static void main(String[] args) { // TODO Auto-generated method stub int i=5; int j=0; try { System.out.println(i/j); } catch(ArithmeticException ae) { System.out.println('wrong input'); } System.out.println('statement after division'); } }
OUTPUT:
कोशिश करें, पकड़ें और अंत में ब्लॉक करें:
- एक अपवाद प्रयास द्वारा नियंत्रित किया जाता है, ब्लॉक को पकड़ें।
- कथन जो अपवादों को जन्म दे सकते हैं, उन्हें कोशिश ब्लॉक के अंदर लिखा गया है।
- जब कोई अपवाद होता है, तो कैच ब्लॉक के अंदर कथनों को निष्पादित किया जाएगा। यदि अपवाद नहीं होता है, तो कैच ब्लॉक निष्पादित नहीं किया जाएगा।
- अपवाद के होने या न होने के बावजूद, अंतिम ब्लॉक निष्पादित किया जाएगा।
अपवाद प्रकार
अनियंत्रित अपवाद:
जैसा कि अनियंत्रित अपवाद उचित प्रोग्रामिंग से बचा जा सकता है ( जैसे नल सूचक अपवाद, अंकगणित अपवाद) संकलक द्वारा जाँच नहीं किया जाएगा। अनियंत्रित अपवाद को रनटाइम पर फेंक दिया जाएगा।
जाँच अपवाद:
- जांचे गए अपवाद को संकलक द्वारा जांचा जाएगा और इसके अपवाद को फेंकना या संभालना अनिवार्य होगा।
- इस अपवाद का उपयोग त्रुटि कोड को नियमित कोड से अलग करने के लिए किया जाता है।
- सभी चेक किए गए अपवादों को समूहीकृत किया गया है और यह समस्याओं को अलग करने में उपयोगी है।
उदाहरण: java.io
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class DemoExpChecked { public static void main(String[] args) { try { File file=new File('input.txt'); BufferedReader br = new BufferedReader(new FileReader(file)) ; String content; while ((content=br.readLine())!=null) { System.out.println(content); } br.close(); } catch(IOException e) { e.printStackTrace(); } } }
त्रुटियाँ
प्रोग्राम तार्किक गलतियों या JVM समस्या से संबंधित किसी भी मेमोरी के कारण त्रुटि हो सकती है।
उदाहरण: बाध्य त्रुटि या स्टैक ओवरफ़्लो त्रुटि से स्मृति।
फेंको और फेंको
'थ्रो' कीवर्ड का उपयोग अपवाद को फेंकने के लिए किया जाता है, जबकि 'थ्रो' कीवर्ड का उपयोग अपवाद को घोषित करने के लिए किया जाता है।
उदाहरण कार्यक्रम फेंकें:
क्रोम में .swf कैसे खोलें
public class Demothrow { String content ; public void driving(String c) { this.content=c; if (content.isEmpty()) { throw new NullPointerException('content is empty'); } else { System.out.println('content=='+content); } } public static void main(String[] args) { Demothrow dt=new Demothrow(); dt.driving(''); } }
फेंकता उदाहरण कार्यक्रम:
थ्रो का उपयोग यह जानकारी देने के लिए किया जाता है कि यह विधि इस विशेष अपवाद को फेंकती है। जब आप उस विशेष विधि को कॉल करते हैं, तो आपको उस अपवाद को संभालने की आवश्यकता होती है।
public class DemoThrows { int i=2,j=0; public void checkmethod () throws ArithmeticException{ System.out.println(i/j); } public static void main(String[] args) { DemoThrows d =new DemoThrows(); try { d.checkmethod(); } catch (ArithmeticException ae) { ae.printStackTrace(); } } }
ध्यान देने योग्य मुख्य बातें:
- अपवाद असामान्य घटनाएं हैं जो कार्यक्रम के निष्पादन के दौरान हुई हैं और यह निष्पादन प्रवाह को प्रभावित करेगा।
- एक त्रुटि अपवादों से अलग है। त्रुटियां उदाहरण: मेमोरी आउट ऑफ एरर।
- संकलित अपवाद के दौरान जाँच किए गए अपवादों की जाँच की जाती है और इस जाँच किए गए अपवाद से निपटना अनिवार्य है।
- रनटाइम के दौरान एक अनियंत्रित अपवाद होता है।
निष्कर्ष
जावा में अपवाद हैंडलिंग पर इस ट्यूटोरियल ने अपवादों, अपवाद हैंडलिंग और जावा में अपवाद पदानुक्रम की परिभाषा पेश की। हमने जावा में अपवाद वर्ग पर भी चर्चा की जो अपवादों तक पहुंचने के लिए विभिन्न निर्माणकर्ताओं और विधियों को प्रदान करता है।
हमने जावा में होने वाले सामान्य अपवादों की एक सूची का पता लगाया और प्रमुख अपवाद के लिए प्रोग्रामिंग उदाहरणों को देखा। हमने अपवादों और कस्टम अपवादों के प्रकारों के साथ एक जावा कार्यक्रम में होने वाली प्रमुख त्रुटियों पर भी चर्चा की।
=> यहाँ सभी जावा ट्यूटोरियल की जाँच करें।
अनुशंसित पाठ
- शीर्ष 10 सेलेनियम अपवाद और इनसे कैसे निपटें (सटीक कोड)
- JDBC अपवाद हैंडलिंग - SQL अपवाद को कैसे हैंडल करें
- SoapUI Groovy लिपियों में अपवाद को कैसे हैंडल करें - SoapUI Tutorial # 11
- स्ट्रिंग स्ट्रिंग बफर और स्ट्रिंग बिल्डर ट्यूटोरियल के साथ जावा स्ट्रिंग
- जावा परिनियोजन: जावा जार फाइल का निर्माण और निष्पादन
- जावा थ्रेड्स विथ मेथड्स एंड लाइफ साइकल
- जावा वर्चुअल मशीन: जावा एप्लीकेशन चलाने में JVM कैसे मदद करता है
- जावा में मॉडिफायर एक्सेस करें - उदाहरणों के साथ ट्यूटोरियल