CodeGym /Java Blog /अनियमित /पुराना स्तर 09
John Squirrels
स्तर 41
San Francisco

पुराना स्तर 09

अनियमित ग्रुप में प्रकाशित

ज्ञान बनाम कौशल

पुराना स्तर 09 - 1कॉलेज ने हमें सिखाया कि सिद्धांत और व्यवहार में कोई बड़ा अंतर नहीं है। ठीक है, आप निश्चित रूप से समझते हैं कि यह समान नहीं है। लेकिन आप मूल अंतर नहीं देखते हैं। फिर भी एक है। अधिकांश लोग "मुझे पता है" और "मैं कर सकता हूँ" के बीच समानता का चिन्ह लगाते हैं। क्या आप? कैसे कुछ उदाहरणों के बारे में?
  1. मुझे पता है कि धूम्रपान मेरे लिए बुरा है, लेकिन मैं धूम्रपान करता हूँ।
  2. मुझे पता है कि फास्ट फूड मेरे लिए खराब है, लेकिन मैं इसे खाता हूं।
  3. मुझे ट्रैफिक नियम पता हैं लेकिन मैं ड्राइव नहीं कर सकता।
  4. मुझे पता है कि जॉगिंग करना मेरे लिए अच्छा है लेकिन मैं सुबह जॉगिंग नहीं करता।
अक्सर ऐसा होता है कि लोग "मैं कर सकता हूँ" के लिए "मैं जानता हूँ" ले लेता हूँ। यातायात नियमों के साथ यह एक अच्छा उदाहरण है। यदि कोई व्यक्ति नियमों को जानता है और जानता है कि कैसे ड्राइव करना है, तो क्या इसका मतलब है कि वह ड्राइव कर सकता है? नहीं। क्या होगा अगर वह सोचता है कि वह ड्राइव करना जानता है? तो उसे प्रशिक्षक की क्या आवश्यकता होगी - वह पहले से ही सब कुछ जानता है। जब आप सुनिश्चित हैं कि आप पहले से ही सब कुछ जानते हैं तो आप शायद कुछ भी नया नहीं सीखेंगे। और अगर आपको यकीन है कि आप सब कुछ करना जानते हैं, तो आप अध्ययन नहीं करेंगे। इस तरह का ख्याल आपके दिमाग में भी नहीं आएगा। और इसका मतलब है कि आप कुछ सीखने के सभी शानदार अवसरों को खो देंगे। सामान्य कॉलेज आपको केवल ज्ञान देता है; आपको अपने दम पर कौशल हासिल करना होगा। लेकिन मैं क्या सुन रहा हूँ? आपने अपने कॉलेज में थ्योरी के अलावा प्रैक्टिस की है? ठीक है, अगर आपने भौतिकी संकाय में अध्ययन किया है, कम से कम 20% की दक्षता के साथ भाप इंजन का एक कार्यशील मॉडल बनाएं। मुझे यकीन है कि आप इसे करना जानते हैं, लेकिन आप वास्तव में इसे करने में सक्षम नहीं होंगे, क्या मैं सही हूँ? तुम एक रसायनज्ञ हो ? निर्धूम चूर्ण बना लें। तुम्हें पता है कैसे, लेकिन तुम नहीं कर सकते, हा? गणितज्ञ, क्या तुम हो? एक तोपखाना खोल के प्रक्षेपवक्र की गणना करें। खोल के आकार को ध्यान में रखना मत भूलना। वास्तविक जीवन में गणितीय बिंदु नहीं उड़ते। और गोलाकार घोड़े नहीं हैं। पुराना स्तर 09 - 2जीवविज्ञानी? पेनिसिलिन को अलग करें। यह फफूंद खरबूजे पर उगती है, तो आप जानते हैं। तुम्हें पता है कैसे - अद्भुत! क्या आप यह कर सकते हैं? अर्थशास्त्री?तेल की कीमतों में वृद्धि का पूर्वानुमान लगाएं। पूर्ण? और अब इसे अपने पूर्वानुमान के आधार पर $2,000 या $200,000 प्रति वर्ष में बदलें। क्या आपने कभी फॉरेक्स पर खेला है? असली पैसे के लिए? या आप जानते हैं कि यह क्या है? अंतरराष्ट्रीय अर्थशास्त्र? उत्कृष्ट! मैं एक अपतटीय कंपनी कहाँ खोलूँ? हांगकांग, आयरलैंड या संयुक्त राज्य अमेरिका में। क्यों? यहां तक ​​​​कि अगर आप जानते हैं कि, जो संदिग्ध है, तो आप इसे करने में सक्षम नहीं होंगे, क्योंकि आपने वास्तव में इसे कभी नहीं किया है। आपको जरा सा भी अंदाज़ा नहीं है कि इसे कैसे करना है। ओह, आपने कॉलेज में इसका अध्ययन नहीं किया? मुझे तुम्हें वह काम देने का क्या अधिकार है जिसके लिए तुम तैयार नहीं हो? 'क्योंकि ये वास्तविक जीवन के कार्य हैं। यह अभ्यास है , आपने कॉलेज में जो कुछ भी पढ़ा है वह है: गोलाकार घोड़े, पूर्ण प्रतियोगिता - वास्तविक जीवन में इनमें से कोई भी मौजूद नहीं है। लेकिन मैं बताना क्यों भूल गयाविपणन विशेषज्ञ ? मेरे $500 खर्च करने का सबसे अच्छा तरीका क्या है ताकि अधिक से अधिक लोग मेरे व्याख्यानों के बारे में जान सकें? विज्ञापन पर? क्या आप जानते हैं कि न केवल क्लासिक विज्ञापन पहले से ही पुराना है, बल्कि यूएसपी (यूनीक सेलिंग प्रपोजल) की अवधारणा भी है, जो मुझे यकीन है कि आपको कॉलेज में लगभग अद्वितीय रामबाण के रूप में सिखाया गया था। भूल जाओ तुम कुछ भी जानते हो। अपने आप से पूछें - मैं क्या कर सकता हूँ? उपयोगी, मेरा मतलब है? कुछ लोगों के लिए पैसा देना होगा? अच्छा पैसा, मेरा मतलब है? तो दोस्तों, चलिए CodeGym जैसे शानदार कोर्स के लिए आभार व्यक्त करते हैं। इसके कारण आप न केवल प्रोग्राम करना जानेंगे, बल्कि आप वास्तव में इसे करने में सक्षम होंगे। आप कुछ वर्षों में नौकरी पाने और अच्छा पैसा कमाने में भी सक्षम होंगे। मुझे उम्मीद है कि यह पैसा अच्छा और आरामदायक रहने के लिए पर्याप्त होगा। मैं इसे एक बार फिर कहूंगा, ताकि आप याद रखें: इससे कोई फर्क नहीं पड़ता कि आप क्या जानते हैं। केवल एक चीज जो मायने रखती है वह यह है कि आपके पास कौन से उपयोगी कौशल हैं, जिनके लिए लोग आपको भुगतान करने के लिए उत्सुक होंगे। इस बात को आप जितनी जल्दी समझ लें, उतना अच्छा है।

आप एक नए स्तर पर पहुंच गए हैं

स्तर 9

पुराना स्तर 09 - 3

1 रिशा, स्टैक ट्रेस

पुराना स्तर 09 - 4- अरे! आज मैं आपको बताऊंगा कि स्टैक ट्रेस क्या है। लेकिन पहले मैं आपको समझा दूं कि स्टैक क्या है। - कागजात के ढेर की कल्पना करें - एक निश्चित क्लर्क के लिए असाइनमेंट। स्टैक के शीर्ष पर एक नया असाइनमेंट रखा जा सकता है, और वह स्टैक के शीर्ष से असाइनमेंट लेगा। इस प्रकार, असाइनमेंट पहले आओ पर नहीं किया जाएगा। हर बार क्लर्क आखिरी में आने वाले असाइनमेंट को लेता है। संग्रह की ऐसी संरचना को ढेर कहा जाता है । - जावा में, एक विशेष संग्रह है - स्टैक। इस संग्रह में विधियाँ हैं «एक तत्व जोड़ें» और «ले (प्राप्त करें / दूर करें) एक तत्व»। जैसा कि आप पहले से ही जानते हैं, जोड़ा गया अंतिम तत्व पहले लिया जाएगा। - गुंजन। मुझे लगता है, यह मुश्किल नहीं है। - अच्छा। फिर मुझे समझाएं कि स्टैक ट्रेस क्या होता हैहै। - कल्पना करें कि जावा फ़ंक्शन में А फ़ंक्शन B को कॉल करता है , और बाद वाला फ़ंक्शन C को कॉल करता है , जो बदले में, फ़ंक्शन D को कॉल करता है । इसलिए, फ़ंक्शन बी से बाहर निकलने के लिए , आपको पहले फ़ंक्शन सी से बाहर निकलना होगा , और ऐसा करने के लिए आपको फ़ंक्शन डी से बाहर निकलना होगा । यह ढेर के समान ही है। - और समानता क्या है? - स्टैक में, एक निश्चित असाइनमेंट प्राप्त करने के लिए, आपको ऊपर दिए गए सभी असाइनमेंट को भी पूरा करना होगा। - ठीक है, यह एक सादृश्य है, लेकिन मुझे यकीन नहीं है कि मैं सब कुछ ठीक से समझता हूं। - यहाँ देखो। जावा में एक ढेर तत्वों का एक समूह है। यह ढेर में कागज की चादरों की तरह है। ऊपर से तीसरी लेने के लिए आपको दूसरी शीट लेनी होगी, लेकिन इससे पहले आपको पहली वाली लेनी होगी। आप हमेशा चादरें रख सकते हैं और ले सकते हैं, लेकिन आप उन्हें केवल शीर्ष पर रख सकते हैं और केवल ऊपर से ही ले सकते हैं। फ़ंक्शन कॉल पर भी यही बात लागू होती है। फ़ंक्शन ए फ़ंक्शन बी को कॉल करता है , बाद वाला फ़ंक्शन सी को कॉल करता है । से बाहर निकलने के लिए , आपको पहले बी से बाहर निकलना होगा , और ऐसा करने के लिए आपको सी से बाहर निकलना होगा । - ज़रा ठहरिये। अगर मुझे यह सही लगता है, तो पूरा ढेर निकलता है «केवल आखिरी शीट जिसे स्टैक पर रखा गया था, लिया जा सकता है» और «पहले, आखिरी बुलाया गया फ़ंक्शन बाहर निकलना चाहिए»। क्या ऐसा है? - हाँ। तो, फ़ंक्शन कॉल का क्रम "फ़ंक्शन कॉल स्टैक" या बस "कॉल स्टैक" है। अंतिम कहे जाने वाले कार्य को पहले समाप्त किया जाना चाहिए। आइए उदाहरण देखें: पुराना स्तर 09 - 5- ठीक है। मुझे लगता है कि फ़ंक्शन कॉल के साथ सब कुछ स्पष्ट है। लेकिन यह StackTraceElement क्या है ? - जावा वर्चुअल मशीन सभी फ़ंक्शन कॉल लॉग करती है। इस उद्देश्य के लिए इसका एक विशेष संग्रह है - स्टैक। जब एक फ़ंक्शन दूसरे को कॉल करता है, तो JVM इस स्टैक में एक नया तत्व StackTraceElement डालता है। जब फ़ंक्शन समाप्त हो जाता है, तो तत्व को स्टैक से हटा दिया जाता है। इस प्रकार, यह स्टैक हमेशा «फ़ंक्शन कॉल स्टैक» की वर्तमान स्थिति के बारे में अद्यतित जानकारी संग्रहीत करता है। - हर स्टैकट्रेस एलिमेंटतथाकथित विधि के बारे में जानकारी शामिल है। तो आप getMethodName का उपयोग करके इस विधि का नाम प्राप्त कर सकते हैं । - उपरोक्त उदाहरण इसे दिखाता है:
  1. «कॉल स्टैक» प्राप्त करें:
  2. for-प्रत्येक लूप का उपयोग करके सरणी को पुनरावृत्त करें । मुझे आशा है कि आप इसे नहीं भूले हैं।
  3. System.out में विधि नाम प्रिंट करें ।
- एक दिलचस्प बात, और स्पष्ट रूप से आसान। धन्यवाद, रिशा!

2 डिएगो, स्टैक ट्रेस डिस्प्ले पर कार्य

- अरे, अमीगो! स्क्रीन पर स्टैक ट्रेस प्रदर्शित करने के लिए यहां एक छोटा सा कार्य है।
कार्य
1 प्रत्येक विधि को अपना स्टैकट्रेस वापस करना चाहिए
पांच विधियाँ लिखें जो एक दूसरे को बुलाती हैं। प्रत्येक विधि को अपना स्टैकट्रेस वापस करना चाहिए।
2 स्टैकट्रेस फिर से
पाँच विधियाँ लिखें जो एक दूसरे को बुलाती हैं। प्रत्येक विधि को अपनी कॉलर विधि का नाम वापस करना चाहिए। आप स्टैकट्रेस का उपयोग करके कॉलर विधि प्राप्त कर सकते हैं।
3 विधि को कोड की पंक्ति संख्या वापस करनी चाहिए, इस विधि को
पांच विधियों को लिखें जो एक दूसरे को कॉल करते हैं। प्रत्येक विधि को उस कोड की पंक्ति संख्या वापस करनी चाहिए जिससे यह विधि कॉल की गई थी। फ़ंक्शन element.getLineNumber() का उपयोग करें ।
4 10 कॉल का स्टैक ट्रेस
10 कॉल का स्टैक ट्रेस प्राप्त करने के लिए कोड लिखें।
5 विधि को एक परिणाम वापस करना चाहिए - इसकी स्टैक ट्रेस गहराई
एक ऐसी विधि लिखें जो इसकी स्टैक ट्रेस गहराई को प्रदर्शित करे और लौटाए। स्टैक ट्रेस डेप्थ इसकी विधियों की संख्या (सूची में तत्वों की संख्या) है।

3 एली, त्रुटियां और अपवाद

- अरे, अमीगो! आज हमारे पास एक बहुत ही रोचक सबक है। मैं आपको अपवादों के बारे में बताता हूँ। अपवाद प्रोग्राम में त्रुटियों को नियंत्रित करने के लिए एक विशेष तंत्र है। प्रोग्राम में हो सकने वाली त्रुटियों के कुछ उदाहरण यहां दिए गए हैं:
  1. प्रोग्राम पूर्ण डिस्क पर फ़ाइल लिखने का प्रयास करता है।
  2. कार्यक्रम एक चर की एक विधि को कॉल करने का प्रयास करता है जो अशक्त संदर्भ को संग्रहीत करता है।
  3. कार्यक्रम एक संख्या को 0 से विभाजित करने का प्रयास करता है।
इन क्रियाओं के परिणामस्वरूप त्रुटि होती है। आमतौर पर, यह एक प्रोग्राम को बंद करने की ओर ले जाता है - कोड को निष्पादित करना जारी रखने का कोई मतलब नहीं है। - ऐसा क्यों? - जब कार चट्टान से गिर रही हो तो क्या पहिया घुमाने का कोई मतलब है? - क्या आपका मतलब है कि कार्यक्रम समाप्त हो जाना चाहिए? - हाँ। पहले ऐसा ही था। किसी भी त्रुटि के कारण कार्यक्रम समाप्त हो गया। - यह बहुत ही अच्छा फैसला है। - क्या काम करने की कोशिश करना बेहतर नहीं होगा? - हाँ। आपने एमएस वर्ड में एक बहुत बड़ा टेक्स्ट टाइप किया है, इसे सेव किया है, इसे सेव नहीं किया गया है, लेकिन प्रोग्राम आपको बताता है कि सब कुछ ठीक है। और आप टाइपिंग जारी रखें। मूर्ख, है ना? - हाँ। - फिर प्रोग्रामर एक दिलचस्प चाल लेकर आए:प्रत्येक समारोह ने अपने काम की स्थिति लौटा दी। 0 का मतलब था कि फ़ंक्शन काम करता था जैसा कि यह माना जाता था, कोई अन्य मान - कि कोई त्रुटि थी : यह मान एक त्रुटि कोड था। - लेकिन इस दृष्टिकोण का एक नुकसान था। प्रत्येक (!) फ़ंक्शन कॉल के बाद आपको फ़ंक्शन द्वारा लौटाए गए कोड (नंबर) की जांच करनी थी। सबसे पहले, यह असुविधाजनक था: एरर-हैंडलिंग कोड को शायद ही कभी निष्पादित किया गया था, लेकिन आपको इसे हमेशा लिखना पड़ा। दूसरा, कार्य स्वयं अक्सर अलग-अलग मान लौटाते हैं - उनके साथ क्या करना है? - हाँ। मैं यही पूछने वाला था। - फिर एक उज्ज्वल भविष्य आया - अपवाद और त्रुटि-प्रबंधन दिखाई दिया। यह ऐसे काम करता है:
  1. जब कोई त्रुटि होती है, तो जावा वर्चुअल मशीन एक विशेष वस्तु - एक अपवाद - बनाता है जिसमें त्रुटि के बारे में सारी जानकारी होती है। अलग-अलग त्रुटियों के लिए अलग-अलग अपवाद हैं।
  2. तब यह अपवाद प्रोग्राम को वर्तमान फ़ंक्शन को तुरंत बाधित करने के लिए मजबूर करता है, और अगला फ़ंक्शन, जब तक कि वह मुख्य विधि से बाहर न निकल जाए। इसके बाद कार्यक्रम समाप्त हो जाता है। जावा डेवलपर्स इस प्रक्रिया को "रोल बैक द कॉल स्टैक" कहते हैं।
- लेकिन आपने कहा है कि कार्यक्रम निश्चित रूप से बाहर नहीं जा रहा है। - यह सही है, क्योंकि अपवाद को पकड़ने का एक तरीका है। जब भी और जहां भी आपको आवश्यकता हो, आप इन अपवादों को पकड़ने और कुछ महत्वपूर्ण करने के लिए एक विशेष कोड लिख सकते हैं। - ऐसा करने के लिए, एक विशेष निर्माण ट्राइ-कैच है । देखो यह कैसे काम करता है: पुराना स्तर 09 - 6- क्यों «मेथड 1 कॉलिंग के बाद। कभी नहीं दिखाया जाएगा» स्क्रीन पर प्रदर्शित नहीं होगा? - मुझे खुशी है कि आपने इसके बारे में पूछा। 25वीं पंक्ति में शून्य से विभाजन है। यह एक त्रुटि की ओर जाता है - एक अपवाद। जावा वर्चुअल मशीन ने त्रुटि सूचना युक्त ऑब्जेक्ट ArithmeticException बनाई। यह वस्तु एक अपवाद है। - विधि method1() के अंदर एक अपवाद हुआ ।इसके परिणामस्वरूप विधि को तत्काल समाप्त कर दिया गया। यदि कोई ट्राइ-कैच ब्लॉक नहीं था, तो यह मुख्य विधि को समाप्त कर देगा । - यदि ट्राई ब्लॉक के अंदर कोई अपवाद होता है, तो इसे कैच ब्लॉक में पकड़ा जाएगा। ब्लॉक प्रयास में बाकी कोड निष्पादित नहीं किए जाएंगे, ब्लॉक कैच का निष्पादन तुरंत शुरू हो जाएगा। - मैं पूरी तरह से नहीं समझा। - दूसरे शब्दों में, यह कोड इस तरह काम करता है:
  1. यदि ट्राई ब्लॉक के अंदर कोई अपवाद होता है , तो इस ब्लॉक में कोड निष्पादित नहीं किया जाता है, लेकिन ब्लॉक कैच का निष्पादन शुरू हो जाता है।
  2. यदि कोई अपवाद नहीं होता है, तो कोशिश ब्लॉक को अंत तक निष्पादित किया जाता है , और पकड़ को कभी भी निष्पादित नहीं किया जाता है
- अहम! - कल्पना करें कि प्रत्येक विधि कॉल के बाद हम जांचते हैं कि कॉल की गई विधि स्वयं या अपवाद के कारण समाप्त हो गई है या नहीं। यदि कोई अपवाद होता है, तो जेवीएम उपलब्ध होने पर ब्लॉक कैच को निष्पादित करना शुरू कर देता है, और अपवाद को पकड़ लेता है। यदि कोई कैच ब्लॉक नहीं है, तो JVM वर्तमान पद्धति को समाप्त कर देता है। फिर वही जाँच विधि में शुरू होती है जिसे वर्तमान विधि कहा जाता है। - अब मुझे लगता है कि मुझे मिल गया। - वह ठीक है। - और कैच ब्लॉक के अंदर वह अपवाद क्या है? - सभी अपवाद वर्ग अपवाद से विरासत में मिली कक्षाएं हैं। हम कैच में उसकी कक्षा निर्दिष्ट करके उनमें से किसी को भी पकड़ सकते हैंब्लॉक, या उन सभी को एक साथ एक सामान्य पैरेंट क्लास एक्सेप्शन निर्दिष्ट करके। फिर, चर ई से (यह चर एक अपवाद वस्तु के संदर्भ को संग्रहीत करता है) आप त्रुटि के बारे में सभी आवश्यक जानकारी प्राप्त कर सकते हैं। - महान! और क्या होगा अगर मेरी पद्धति में अलग-अलग अपवाद होते हैं, क्या मैं उन्हें अलग-अलग तरीकों से संभाल सकता हूं? - आपको करना होगा। आप ऐसा कर सकते हैं: पुराना स्तर 09 - 7- ट्राई ब्लॉक में कई कैच ब्लॉक हो सकते हैं, जिनमें से प्रत्येक अपने प्रकार के अपवादों को पकड़ेगा। - उम्फ। खैर, मुझे मिल गया। बेशक, मैं खुद ऐसा कुछ नहीं लिखूंगा। हालांकि, अगर मैं इस तरह के कोड से मिलता हूं तो मुझे डर नहीं लगेगा।

4 एली, रनटाइम अपवाद, फेंकता है

पुराना स्तर 09 - 8- मैंने आज एक और विषय लाने का फैसला किया। जावा में, सभी अपवादों को दो प्रकारों में विभाजित किया जाता है - नियंत्रित/चेक किया गया और अनियंत्रित/अनियंत्रित । चेक किए गए अपवादों को पकड़ा जाना चाहिए , अनचेक किए गए अपवादों को पकड़ा जा सकता है लेकिन इसकी आवश्यकता नहीं है- क्या उद्देश्य पर कोड में अपवादों को फेंकना संभव है? - अपने कोड में, आप स्वयं अपवाद फेंक सकते हैं। आप अपने स्वयं के अपवाद भी लिख सकते हैं। लेकिन हम इस छेद में बाद में गहरा करेंगे। अब आइए जानें कि जावा वर्चुअल मशीन द्वारा फेंके गए अपवादों के साथ कैसे काम किया जाए। - ठीक है। - यदि अपवाद ClassNotFoundException और FileNotFoundException हैंएक विधि में फेंके जाते हैं (दिखाई देते हैं), प्रोग्रामर को उन्हें एक विधि (विधि शीर्षलेख) के हस्ताक्षर में निर्दिष्ट करना होता है। ऐसे अपवादों की जाँच की जाती है। यह आमतौर पर ऐसा दिखता है: पुराना स्तर 09 - 9- तो, ​​हम केवल फेंकता लिखते हैं और अपवादों को अल्पविराम से अलग करते हैं। सही? क्या ऐसा है? - हाँ। लेकिन एक और दिलचस्प बात है. नीचे दिए गए उदाहरण को संकलित करने के लिए, मेथड 1 () को कॉल करने वाली विधि को या तो इन अपवादों को पकड़ना है या उन्हें आगे फेंकना है। यदि आप चेक किए गए अपवाद को आगे फेंकना चाहते हैं तो आपको इसे विधि के शीर्षलेख में निर्दिष्ट करने की आवश्यकता है । - एक बार फिर, यदि मुख्य विधि में, आप एक ऐसी विधि को कॉल करना चाहते हैं, जिसके हेडर वाक्यांश में FileNotFoundException फेंकता है , ... तो आपको इन दो चीजों में से एक करना होगा:
  1. अपवादों को पकड़ने के लिए FileNotFoundException, ...
    आपको उस कोड को लपेटना होगा जहां आप ट्राइ-कैच ब्लॉक के साथ एक खतरनाक विधि कहते हैं
  2. अपवादों को पकड़ने के लिए नहीं FileNotFoundException, ...
आपको इन अपवादों को अपनी विधि main की फेंकता सूची में जोड़ना होगा । - क्या आप मुझे एक उदाहरण देंगे? - यहां देखें: - यह उदाहरण संकलित नहीं किया जाएगा, क्योंकि विधि मुख्य विधि विधि 1 () को कॉल करती है, जो अपवादों को फेंकती है जिन्हें पकड़ा जाना चाहिए। - उदाहरण संकलित करने के लिए, आपको मुख्य विधि में अपवाद हैंडलिंग जोड़ने की आवश्यकता है । आप इसे दो तरीकों से कर सकते हैं: - और यहां हम इसे ट्राई-कैच का उपयोग करके पकड़ते हैं : - यह स्पष्ट हो रहा है, लेकिन बहुत कम। - नीचे दिए गए उदाहरण पर गौर करें: - फिर भी एक अपवाद है - रनटाइम अपवाद और उससे विरासत में मिली कक्षाएं।पुराना स्तर 09 - 10पुराना स्तर 09 - 11पुराना स्तर 09 - 12पुराना स्तर 09 - 13उन्हें पकड़ने या फेंकने की जरूरत नहीं है। ये अनियंत्रित अपवाद हैं। इन अपवादों को कठिन-से-भविष्यवाणी माना जाता है, इसलिए उनकी घटना की भविष्यवाणी करना लगभग असंभव है। आप उनके साथ वही काम कर सकते हैं, लेकिन उन्हें थ्रो में निर्दिष्ट करने की कोई आवश्यकता नहीं है ।

5 रिशा, कॉल स्टैक को रोल करना, अपवादों में इसे कैसे करना है

- मैं आपको थोड़ा और बताना चाहता हूं कि अपवाद कैसे काम करते हैं। नीचे दिया गया उदाहरण स्पष्ट करता है कि: पुराना स्तर 09 - 14- मैं समझ नहीं पाया। - ठीक है। मैं समझाता हूँ कि क्या हो रहा है। - बाईं ओर के उदाहरण में, हम श्रृंखला क्रम में कई विधियों को कॉल करते हैं। Method2() में हम विशेष रूप से एक अपवाद (त्रुटि आरंभ करने के लिए) बनाते और फेंकते हैं। - दाईं ओर का उदाहरण दिखाता है कि क्या होता है। विधि 2() ​​देखें । अपवाद का निर्माण इस प्रकार होता है: हम रनटाइम अपवाद प्रकार का एक ऑब्जेक्ट बनाते हैं , इसे एक विशेष चर अपवाद में संग्रहीत करते हैं और तुरंत विधि से बाहर निकलते हैं - वापसी । - मेथड 1 में, मेथड 2 के कॉल के बाद एक चेक है,अगर कोई अपवाद है या नहीं; यदि कोई अपवाद है, तो विधि 1 तुरंत समाप्त हो जाती है। यह जाँच प्रत्येक (!) जावा विधि को कॉल करने के बाद पूरी तरह से की जाती है। - बहुत खूब! - बिल्कुल। - मेन मेथड के दायीं ओर के कॉलम में मैंने लिखा कि क्या होता है जब ट्राई-कैच ब्लॉक द्वारा एक एक्सेप्शन पकड़ा जाता है। यदि कोई अपवाद नहीं था, तो योजना के अनुसार कोड निष्पादित करना जारी रखता है। यदि पकड़ में निर्दिष्ट प्रकार का अपवाद होता है , तो हम इसे संभालते हैं। - और फेंक और उदाहरण का क्या मतलब है? - बाईं ओर की अंतिम पंक्ति को देखें नया रनटाइम अपवाद (ओं) को फेंक दें. इस तरह हम एक अपवाद बनाते और फेंकते हैं। यह सिर्फ एक उदाहरण है। हम इसे अब तक नहीं करेंगे। - सही ब्लॉक में « а exampleof B » कमांड का उपयोग करके हम जांचते हैं कि ऑब्जेक्ट a में टाइप B है या नहीं । यही है, चाहे वेरिएबल एक्सेप्शन में स्टोर की गई वस्तु का प्रकार RuntimeException हो । यह एक तार्किक अभिव्यक्ति है। - ठीक है, यह थोड़ा सा स्पष्ट हो रहा है।

6 डिएगो, अपवाद पकड़ने का कार्य

- यहाँ देखो! अंकल डिएगो आपके लिए पकड़ने के लिए कुछ टास्क लेकर आए हैं। आप शुभकामनाएँ। मुझे लगता है कि आपको इसकी आवश्यकता होगी। हे। पुराना स्तर 09 - 15- अरे, अमीगो! यहां कुछ रोचक अपवाद कैच टास्क दिए गए हैं।
पकड़ने के कार्य
1 1. संख्याओं के साथ काम करते समय अपवाद
कोड चलाने पर होने वाले अपवाद को पकड़ें:
int a = 42 / 0;
इसके प्रकार को निर्दिष्ट करते हुए स्क्रीन पर अपवाद प्रदर्शित करें
2 2. स्ट्रिंग के साथ काम करते समय अपवाद
उस अपवाद को पकड़ें जो कोड चलाते समय होता है:
String s = null;
स्ट्रिंग एम = s.toLowerCase ();
इसके प्रकार को निर्दिष्ट करते हुए स्क्रीन पर अपवाद प्रदर्शित करें।
3 3. सरणियों के साथ काम करते समय अपवाद
उस अपवाद को पकड़ें जो कोड चलाते समय होता है:
int[] m = new int[2];
एम [8] = 5;
इसके प्रकार को निर्दिष्ट करते हुए स्क्रीन पर अपवाद प्रदर्शित करें।
4 4. सूची संग्रह के साथ काम करते समय अपवाद
उस अपवाद को पकड़ें जो कोड चलाने पर होता है:
ArrayList<String> list = new ArrayList<String>();
स्ट्रिंग s = list.get(18);
इसके प्रकार को निर्दिष्ट करते हुए स्क्रीन पर अपवाद प्रदर्शित करें।
5 5. नक्शा संग्रह के साथ काम करते समय अपवाद
उस अपवाद को पकड़ें जो कोड चलाने पर होता है
:
map.put (शून्य, अशक्त);
map.remove (शून्य);
इसके प्रकार को निर्दिष्ट करते हुए स्क्रीन पर अपवाद प्रदर्शित करें।
- युक्ति: पहले एक प्रोग्राम लिखें, फिर देखें कि क्या अपवाद होता है और उसके बाद कोड बदलें और उस अपवाद को पकड़ें।

7 रिशा, मल्टीपल कैच कैसे काम करता है

पुराना स्तर 09 - 16- अब, कुछ और रोचक व्याख्यान। मुझे पढ़ाना बहुत पसंद है। - मैं आपको बताना चाहता हूं कि मल्टीपल कैच कैसे काम करता है। वास्तव में यह बहुत सरल है: जब ब्लॉक try में एक अपवाद होता है , तो प्रोग्राम निष्पादन को पहले कैच में स्थानांतरित कर दिया जाता है । - यदि ब्लॉक कैच के कोष्ठकों में निर्दिष्ट प्रकार अपवाद-ऑब्जेक्ट के प्रकार के समान है, तो कोड निष्पादन {} के अंदर शुरू होता है। अन्यथा हम अगले कैच पर जाते हैं । वहां चेक दोहराया जाता है। - यदि कोई और कैच ब्लॉक नहीं हैं, लेकिन अपवाद नहीं पकड़ा गया है, तो इसे आगे फेंक दिया गया है, और वर्तमान विधि बाधित हो गई है। - अच्छा ऐसा है। वह कैच निष्पादित किया जाएगा, जिसका प्रकार अपवाद के प्रकार से मेल खाता है। - हाँ सही। दरअसल, यह थोड़ा और जटिल है: मुद्दा यह है कि कक्षाएं एक-दूसरे से विरासत में मिल सकती हैं। यदि "गाय" वर्ग "पशु" वर्ग से विरासत में मिला है, तो "गाय" प्रकार की वस्तु न केवल "गाय" प्रकार के एक चर में संग्रहीत की जा सकती है, बल्कि "पशु" प्रकार के एक चर में भी संग्रहीत की जा सकती है। . - तो क्या हुआ? - चूंकि सभी अपवाद वर्ग अपवाद या रनटाइम अपवाद (जो अपवाद से भी विरासत में मिला है ) से विरासत में मिले हैं, वे सभी कमांड कैच (अपवाद ई) या पकड़ (रनटाइम अपवाद ई) का उपयोग करके पकड़े जा सकते हैं । - तो क्या हुआ? - इस का मतलब है कि,सबसे पहले, आप पकड़ (अपवाद ई) कमांड का उपयोग करके किसी भी अपवाद को पकड़ सकते हैंदूसरा, कैच ब्लॉक का क्रम मायने रखता है। उदाहरण: - 0 से विभाजन से उत्पन्न अंकगणितीय अपवाद दूसरे कैच में पकड़ा जाता है। पुराना स्तर 09 - 17- नीचे दिए गए उदाहरण में, ArithmeticException को पहले कैच में पकड़ा गया है , क्योंकि सभी अपवादों की कक्षाएं अपवाद से विरासत में मिली हैं। तो, Exception किसी भी Exception को पकड़ लेता हैपुराना स्तर 09 - 18- नीचे दिए गए उदाहरण में, अपवाद ArithmeticException पकड़ा नहीं गया है, लेकिन कॉलिंग विधि के लिए आगे फेंक दिया गया है। पुराना स्तर 09 - 19- ठीक है, अब यह स्पष्ट हो रहा है। ये अपवाद इतने आसान नहीं हैं। - ऐसा ही लगता है। वास्तव में, यह जावा में सबसे सरल चीजों में से एक है। - मुझे संदेह है कि इसके बारे में खुश होना चाहिए या परेशान होना ...

8 डिएगो, एकाधिक अपवाद पकड़ कार्य

- अरे, अमीगो! कल मैं नशे में हो गया था और आपके कार्यों को बहुत जटिल बना दिया था, लेकिन मुझे आशा है कि आपकी ओर से कोई कठोर भावना नहीं है और आप उन सभी को हल कर लेंगे? यह आपकी भलाई के लिए है। यहाँ:
कार्य
1 1. अपवाद
एक विधि है जो अपवाद से विरासत में मिले दो अपवादों को फेंकती है , और अन्य दो RuntimeException से विरासत में मिली है : NullPointerException , ArithmeticException , FileNotFoundException , और URISyntaxException

आपको NullPointerException और FileNotFoundException को पकड़ने की आवश्यकता है , लेकिन ArithmeticException और URISyntaxException को पकड़ने की नहीं । इसे कैसे करना है?
2 2. पकड़ने वाले अपवाद
तीन अपवाद हैं जो अपवाद से क्रमिक रूप से विरासत में मिले हैं :
वर्ग अपवाद 1 अपवाद का विस्तार करता है
वर्ग अपवाद 2 अपवाद 1 का विस्तार करता है
वर्ग अपवाद 3 अपवाद 2 का विस्तार करता है
एक विधि है, जिसे निम्नानुसार वर्णित किया गया है:
सार्वजनिक स्थैतिक शून्य विधि 1 () अपवाद 1, अपवाद 2, अपवाद 3

एक पकड़ लिखें सभी तीन Exception1 , Exception2 और Exception3 को पकड़ने के लिए ब्लॉक करें
3 3. चयनात्मक अपवादों को पकड़ना
1. पता करें कि BEAN.methodThrowExceptions विधि द्वारा कौन से अपवाद फेंके गए हैं ।
2. विधि प्रक्रिया अपवाद () को विधि BEAN.methodThrowExceptions को कॉल करना चाहिए और अपवादों को संभालना चाहिए:
2.1। यदि कोई अपवाद FileSystemException होता है, तो विधि BEAN.log को कॉल करके इसे लॉग करें और
2.2 को आगे फेंकें। यदि कोई अपवाद CharConversionException या कोई अन्य IOException होता है, तो बस विधि BEAN.log
3 को कॉल करके इसे लॉग करें। 2.1 में अग्रेषित अपवाद का वर्ग/प्रकार जोड़ें। प्रक्रिया के लिए अपवाद ()विधि हस्ताक्षर।
4. विधि main() में शेष अपवाद को हैंडल करें और इसे लॉग करें। कोशिश करें..कैच टिप का उपयोग करें

:
यदि आपने अपवाद MyException पकड़ा है , जिसे आप पकड़ना नहीं चाहते हैं, तो आप इसे निम्न कोड का उपयोग करके आगे फेंक सकते हैं:
कैच (MyException ई) {
फेंक ई;
}
4 4. चेक किए गए अपवादों को पकड़ना प्रक्रिया अपवाद ()
विधि में सभी चेक किए गए अपवादों को संभालें । आपको प्रत्येक चेक किए गए अपवाद को स्क्रीन पर प्रदर्शित करने की आवश्यकता है। आप केवल एक ब्लॉक प्रयास का उपयोग कर सकते हैं ।

5 5. अनियंत्रित अपवादों को पकड़ना प्रक्रिया अपवाद ()
विधि में सभी अनियंत्रित अपवादों को संभालना । आपको PrintStack() विधि का उपयोग करके स्क्रीन पर प्रत्येक अपवाद के स्टैक ट्रेस को प्रदर्शित करने की आवश्यकता है । आप केवल एक ब्लॉक प्रयास का उपयोग कर सकते हैं ।

9 प्रोफेसर, अपवादों पर व्याख्यान

- आज हमारे पास एक अति-दिलचस्प विषय है - अपवाद। उस समय, जब युवा वैज्ञानिक और प्रोग्रामर इस विषय को लेकर बहुत उत्साहित थे... - क्षमा करें, मुझे प्रयोगशाला जाना चाहिए। यहाँ व्याख्यान नोट्स हैं। मुझे लगता है कि आप इसे अपने लिए समझ लेंगे। यहां: जावा एक्सेप्शन (ओरेकल डॉक्यूमेंटेशन) जावा में एक्सेप्शन हैंडलिंग (जावा टी पॉइंट) जावा - एक्सेप्शन हैंडलिंग (ट्यूटोरियल पॉइंट) बेसिक जावा एक्सेप्शन हैंडलिंग

10 जूलियो

- अमीगो, आज के पाठ के बारे में आप क्या सोचते हैं? क्या आपका पॉज़िट्रॉन मस्तिष्क अभी तक काम नहीं कर पाया है? डिएगो के कार्य किसी को भी थका देने के लिये काफी हैं। आइए एक बियर पल लें और आराम करें। क्या आप अभी भी खड़े हैं?

11 कप्तान गिलहरी

- हैलो, सिपाही! - सुप्रभात सर! - मेरे पास आपके लिए कुछ शानदार खबरें हैं। अपने कौशल को सुदृढ़ करने के लिए यहां एक त्वरित जांच है। इसे हर दिन करें, और आप अपने कौशल में तेजी से वृद्धि करेंगे। कार्य विशेष रूप से Intellij IDEA में करने के लिए डिज़ाइन किए गए हैं।
Intellij Idea में करने के लिए अतिरिक्त कार्य
1 1. शून्य से विभाजन
एक विधि बनाएँ public static void divisionByZero() , जहाँ आपको किसी भी संख्या को शून्य से विभाजित करने की आवश्यकता है, और विभाजन के परिणाम को स्क्रीन पर प्रदर्शित करें। डिवीजनबायजेरो() विधि कॉल को try..catch में
लपेटें । स्क्रीन पर अपवाद स्टैक ट्रेस विधि का उपयोग करके प्रदर्शित करें Exception.printStackTrace()
2 2. 10 से 0 तक उलटी गिनती
10 से 0 तक उलटी गिनती करने के लिए एक लूप लिखें। देरी करने के लिए थ्रेड.स्लीप (100) का उपयोग करें; स्लीप कॉल को एक कोशिश..कैच में
लपेटें ।
3 3. एक मेथड को ट्राई..कैच में लपेटें
कीबोर्ड से नंबर पढ़ें। कीबोर्ड से संख्याओं को पढ़ने के लिए एक अलग विधि readData() में एक कोड लिखें । इस विधि के पूरे शरीर को लपेटें ( रीडडाटा()
विधि के अंदर संपूर्ण कोड , उस सूची की घोषणा को छोड़कर जहां संख्याएं संग्रहीत की जाएंगी) try..catch में । यदि उपयोगकर्ता संख्या दर्ज करने के बजाय कुछ पाठ दर्ज करता है, तो विधि को अपवाद को पकड़ना होगा और स्क्रीन पर पहले दर्ज किए गए सभी नंबरों को प्रदर्शित करना होगा। स्क्रीन पर नंबर प्रदर्शित करें। प्रत्येक संख्या एक नई पंक्ति पर होनी चाहिए। संख्याओं का क्रम वैसा ही होना चाहिए जैसा इनपुट में था।


4 4. दिनांक परिवर्तक
कीबोर्ड से दिनांक को «08/18/2013» प्रारूप में पढ़ें,
स्क्रीन पर उस दिनांक को «AUG 18, 2013» के रूप में प्रदर्शित करें।
ऑब्जेक्ट दिनांक और SimpleDateFormat का उपयोग करें ।
5 5. स्वर और व्यंजन
एक प्रोग्राम लिखें जो कीबोर्ड से लाइन पढ़ता है।
कार्यक्रम को स्क्रीन पर दो तार प्रदर्शित करने चाहिए:
1) पहली स्ट्रिंग में स्वर होने चाहिए
2) दूसरी स्ट्रिंग में दर्ज किए गए पाठ से व्यंजन और विराम चिह्न होने चाहिए।
वर्णों को रिक्त स्थान से अलग करें।

उदाहरण इनपुट:
रोकें, देखें, सुनें,
उदाहरण आउटपुट:
oooie
stplklstn
6 6. लिटिल रेड राइडिंग हूड की कहानी
1. पांच वर्ग हैं: रेड राइडिंग हूड, दादी, पैटी, लकड़हारा, भेड़िया। 2. प्रत्येक वर्ग में ArrayList
प्रकार के दो क्षेत्र होते हैं : मारे गए और खाए गए। 3. आवश्यक वस्तुएं पहले ही बनाई जा चुकी हैं (हुड, दादी, ...)। 4. «लिटिल रेड राइडिंग हूड» का तर्क प्राप्त करने के लिए सही संबंध बनाएं (किसने खाया और किसको मार डाला)।

7 7. स्थैतिक संशोधक को स्थानांतरित करें
स्थैतिक संशोधक को स्थानांतरित करें ताकि कोड संकलित हो।
8 8. संख्याओं की सरणियों की सूची
एक सूची बनाएँ जिसके तत्व संख्याओं की सरणियाँ हों। सूची में क्रमशः 5, 2, 4, 7, 0 लंबाई के साथ पाँच ऑब्जेक्ट सरणियाँ जोड़ें। सरणियों को किसी भी डेटा से भरें और उन्हें स्क्रीन पर प्रदर्शित करें।
9 9. दस बिल्लियाँ
एक वर्ग बनाएँ बिल्ली एक क्षेत्र के साथ स्ट्रिंग नाम
एक शब्दकोश नक्शा<स्ट्रिंग, कैट> बनाएं , «नाम» - «बिल्ली» मॉडल पर 10 बिल्लियों को जोड़ें। मानचित्र
से नामों का एक सेट प्राप्त करें और सेट को स्क्रीन पर प्रदर्शित करें।
- वे कार्य साग के लिए थे। मैंने उच्च जटिलता के बोनस कार्य जोड़े। शीर्ष बंदूकों के लिए ही।
बोनस कार्य
1 1. प्रोग्राम कंपाइल और रन नहीं करता है। इसे ठीक करें।
कार्य: प्रोग्राम को कीबोर्ड से दो फ़ाइल नामों को पढ़ना चाहिए और पहली फ़ाइल को दूसरे नाम से निर्दिष्ट स्थान पर कॉपी करना चाहिए।
2 2. प्रोग्राम में नई कार्यक्षमता जोड़ें।
पुराना कार्य: प्रोग्राम को कीबोर्ड से दो फ़ाइल नामों को पढ़ना चाहिए और पहली फ़ाइल को दूसरे नाम से निर्दिष्ट स्थान पर कॉपी करना चाहिए।
नया कार्य: प्रोग्राम को कीबोर्ड से दो फ़ाइल नामों को पढ़ना चाहिए और पहली फ़ाइल को दूसरे नाम से निर्दिष्ट स्थान पर कॉपी करना चाहिए।

यदि निर्दिष्ट नाम वाली फ़ाइल (जिसे कॉपी किया जा रहा है) मौजूद नहीं है, तो प्रोग्राम को स्क्रीन पर "फ़ाइल मौजूद नहीं है" संदेश प्रदर्शित करना चाहिए और फ़ाइल नाम को पढ़ने से पहले कंसोल से फ़ाइल नाम को एक बार फिर से पढ़ने का प्रयास करना चाहिए दूसरी (गंतव्य) फ़ाइल का नाम।
3 3. एल्गोरिदम सीखना और अभ्यास करना।
कीबोर्ड से शब्दों और संख्याओं की सूची पढ़ें। स्क्रीन पर शब्दों को आरोही क्रम में और संख्याओं को अवरोही क्रम में प्रदर्शित करें।

उदाहरण इनपुट:
चेरी
1
बीन
3
सेब
2
0
तरबूज

उदाहरण आउटपुट:
सेब
3
बीन
2
चेरी
1
0
तरबूज
टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION