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