throws Exception
घोषणा तरीकों कि प्रत्याशित लेकिन अपरिहार्य कारणों के लिए एक अपवाद फेंक सकती है का ट्रैक रखने के एक स्वचालित तरीका है। घोषणा आमतौर पर अपवादों के प्रकार या प्रकारों के बारे में विशिष्ट होती है जिन्हें इस तरह से throws IOException
या के रूप में फेंक दिया जा सकता है throws IOException, MyException
।
हम सभी के पास कोड होगा या अंततः अप्रत्याशित रूप से बंद हो जाएगा और कुछ अपवाद के कारण एक अपवाद की रिपोर्ट करता है जिसे हमने प्रोग्राम चलाने से पहले अनुमान नहीं किया था, जैसे कि शून्य से विभाजन या सीमा से बाहर। चूँकि त्रुटियों को विधि द्वारा अपेक्षित नहीं किया गया था, इसलिए उन्हें "पकड़ा नहीं जा सका" और एक कोशिश कैच क्लॉज के साथ संभाला गया। विधि के किसी भी अनसुने उपयोगकर्ताओं को भी इस संभावना का पता नहीं होगा और उनके कार्यक्रम भी बंद हो जाएंगे।
जब प्रोग्रामर जानता है कि कुछ प्रकार की त्रुटियां हो सकती हैं, लेकिन विधि के बाहर इन अपवादों को संभालना चाहते हैं, तो विधि एक या एक से अधिक प्रकार के अपवादों को कॉल करने की विधि को संभालने के बजाय "फेंक" सकती है। यदि प्रोग्रामर ने घोषणा नहीं की कि विधि (हो सकता है) एक अपवाद को फेंक दे (या यदि जावा में इसे घोषित करने की क्षमता नहीं है), तो कंपाइलर को पता नहीं चल सकता है और यह भविष्य के उपयोगकर्ता के बारे में जानने के लिए होगा। किसी भी अपवाद को पकड़ना और संभालना विधि फेंक सकता है। चूंकि कार्यक्रमों में कई अलग-अलग कार्यक्रमों द्वारा लिखी जाने वाली विधियों की कई परतें हो सकती हैं, इसलिए उन तरीकों को ट्रैक करना मुश्किल (असंभव) हो जाता है जो अपवादों को फेंक सकते हैं।
भले ही जावा में अपवादों को घोषित करने की क्षमता है, फिर भी आप एक नई पद्धति को अनकहे और अघोषित अपवादों के साथ लिख सकते हैं, और जावा इसे संकलित करेगा और आप इसे चला सकते हैं और सर्वश्रेष्ठ की उम्मीद कर सकते हैं। यदि आप अपनी विधि को घोषित अपवाद के रूप में घोषित करते हैं, तो जब तक आप अपनी पद्धति में घोषित अपवाद (एस) को नहीं संभालते या अपनी पद्धति को घोषित नहीं करते हैं, तब तक जावा आपको ऐसा नहीं करने देगा जो आपकी नई विधि संकलित करता है। अपवाद (ओं) या यदि कई अपवाद हैं, तो आप कुछ को संभाल सकते हैं और बाकी को फेंक सकते हैं।
जब एक प्रोग्रामर घोषित करता है कि विधि एक विशेष प्रकार के अपवाद को फेंकती है, तो यह अन्य प्रोग्रामर्स को चेतावनी का एक स्वचालित तरीका है कि एक अपवाद संभव है। प्रोग्रामर तब अपवाद को संभालने का निर्णय ले सकता है या कॉलिंग विधि की घोषणा करके चेतावनी को पारित कर सकता है और उसी अपवाद को फेंक भी सकता है। चूंकि कंपाइलर को चेतावनी दी गई है कि इस नई पद्धति में अपवाद संभव है, तो यह स्वचालित रूप से जांच कर सकता है कि क्या नई विधि के भावी कॉलर अपवाद को संभालते हैं या इसे घोषित करते हैं और एक या दूसरे को लागू करने के लिए।
इस प्रकार के समाधान के बारे में अच्छी बात यह है कि जब कंपाइलर रिपोर्ट Error: Unhandled exception type java.io.IOException
करता है तो वह उस विधि की फ़ाइल और लाइन नंबर देता है जिसे अपवाद फेंकने के लिए घोषित किया गया था। फिर आप केवल हिरन को पारित करने के लिए चुन सकते हैं और अपनी विधि को "थ्रो IOException" भी घोषित कर सकते हैं। यह मुख्य विधि तक सभी तरह से किया जा सकता है जहां यह तब प्रोग्राम को उपयोगकर्ता के अपवाद को रोकने और रिपोर्ट करने का कारण होगा। हालांकि, अपवाद को पकड़ना और उसके साथ अच्छे तरीके से निपटना बेहतर है जैसे कि उपयोगकर्ता को यह बताना कि क्या हुआ है और इसे कैसे ठीक किया जाए। जब कोई विधि अपवाद को पकड़ती है और संभालती है, तो उसे अपवाद घोषित करने की आवश्यकता नहीं है। बोलने के लिए हिरन वहीं रुक जाता है।