इस ट्यूटोरियल में, हम उदाहरणों की मदद से अपवाद हैंडलिंग के लिए थ्रो एंड थ्रो कीवर्ड का उपयोग करना सीखेंगे।
जावा में, अपवादों को दो प्रकारों में वर्गीकृत किया जा सकता है:
- अनियंत्रित अपवाद: वे संकलन समय पर जाँच नहीं कर रहे हैं लेकिन रन-time.For उदाहरण में:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, के तहत अपवादError
वर्ग, आदि - जाँच किए गए अपवाद: उन्हें संकलन-समय पर जांचा जाता है। उदाहरण के लिए,
IOException
,InterruptedException
, आदि
जाँच और अनियंत्रित अपवादों के बारे में विस्तार से जानने के लिए जावा अपवादों का संदर्भ लें।
आमतौर पर, हमें अनियंत्रित अपवादों को संभालने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि प्रोग्रामिंग त्रुटियों के कारण अनियंत्रित अपवाद उत्पन्न होते हैं। और, उन्हें संभालने के बजाय उन्हें सही करना एक अच्छा अभ्यास है।
यह ट्यूटोरियल अब इस बात पर ध्यान केंद्रित करेगा कि चेक किए गए अपवादों का उपयोग कैसे करें throw
और throws
।
जावा कीवर्ड को फेंकता है
हम throws
इस प्रकार के अपवादों को घोषित करने के लिए विधि घोषणा में कीवर्ड का उपयोग करते हैं जो इसके भीतर हो सकते हैं।
इसका सिंटैक्स है:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
जैसा कि आप उपरोक्त वाक्य रचना से देख सकते हैं, हम throws
कई अपवादों को घोषित करने के लिए उपयोग कर सकते हैं ।
उदाहरण 1: जावा कीवर्ड को फेंकता है
import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) )
आउटपुट
java.io.FileNotFoundException: test.txt (ऐसी कोई फ़ाइल या निर्देशिका नहीं)
जब हम इस प्रोग्राम को चलाते हैं, यदि फ़ाइल test.txt
मौजूद नहीं है, तो क्लास FileInputStream
फेंकता है ।FileNotFoundException
IOException
यदि कोई विधि अपवादों को नहीं संभालती है, तो अपवाद के प्रकार जो उसके भीतर हो सकते हैं, उन्हें throws
क्लॉज़ में निर्दिष्ट किया जाना चाहिए ताकि कॉल स्टैक में आगे आने वाली विधियाँ उन्हें संभाल सकें या उन्हें throws
स्वयं कीवर्ड का उपयोग करके निर्दिष्ट कर सकें।
यह findFile()
विधि निर्दिष्ट करती है कि IOException
फेंकी जा सकती है। main()
विधि इस पद्धति को कॉल करती है और अपवाद को संभालती है यदि इसे फेंक दिया जाता है।
कई अपवादों को फेंकना
यहां बताया गया है कि हम throws
कीवर्ड का उपयोग करके कई अपवाद कैसे फेंक सकते हैं ।
import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) )
इधर, findFile()
विधि निर्दिष्ट करता है कि फेंक कर सकते हैं NullPointerException
, IOException
और InvalidClassException
अपने में throws
खंड।
ध्यान दें कि हमने संभाला नहीं है NullPointerException
। ऐसा इसलिए है क्योंकि यह एक अनियंत्रित अपवाद है। इसे throws
क्लॉज में निर्दिष्ट करना और इसे संभालना आवश्यक नहीं है ।
कीवर्ड बनाम फेंकता है कोशिश … पकड़ … अंत में
कई तरीके हो सकते हैं जो अपवाद पैदा कर सकते हैं। try… catch
प्रत्येक विधि के लिए लिखना थकाऊ होगा और कोड लंबा और कम पठनीय हो जाएगा।
throws
यह तब भी उपयोगी है जब आपने अपवाद (एक अपवाद जिसे संभाला जाना चाहिए) की जाँच की है जिसे आप अपनी वर्तमान पद्धति में पकड़ना नहीं चाहते हैं।
जावा कीवर्ड फेंक देते हैं
throw
कीवर्ड स्पष्ट रूप से एक भी अपवाद फेंकने के लिए प्रयोग किया जाता है।
जब एक अपवाद को फेंक दिया जाता है, तो प्रोग्राम निष्पादन का प्रवाह try
ब्लॉक से ब्लॉक में स्थानांतरित हो जाता है catch
। हम throw
एक विधि के भीतर कीवर्ड का उपयोग करते हैं ।
इसका सिंटैक्स है:
throw throwableObject;
एक फेंकने योग्य वस्तु वर्ग Throwable
या वर्ग के उपवर्ग का एक उदाहरण है Throwable
।
उदाहरण 2: जावा थ्रो कीवर्ड
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
आउटपुट
धागे में अपवाद "मुख्य" java.lang.ArithmeticException: Main.divideByZero (Main.java:3) पर Main.main (Main.java:7) से बाहर निकलने की स्थिति 1 पर 0 से विभाजित करने का प्रयास
इस उदाहरण में, हम स्पष्ट रूप से एक फेंक रहे हैं ArithmeticException.
नोट: ArithmeticException
एक अनियंत्रित अपवाद है। आमतौर पर अनियंत्रित अपवादों को संभालना आवश्यक नहीं है।
उदाहरण 3: फेंक दिया गया अपवाद अपवाद
import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) )
आउटपुट
फाइल नहीं मिली
यह findFile()
विधि उस IOException
संदेश के साथ फेंकता है जिसे हमने इसके निर्माता को दिया था।
ध्यान दें कि चूंकि यह एक चेक किया गया अपवाद है, इसलिए हमें इसे throws
क्लॉज में निर्दिष्ट करना होगा ।
इस पद्धति को कॉल करने वाले तरीकों findFile()
को या तो इस अपवाद को संभालने की आवश्यकता है या इसे throws
स्वयं कीवर्ड का उपयोग करके निर्दिष्ट करें ।
हमने इस अपवाद को main
()
विधि में संभाला है । जब एक अपवाद फेंक दिया जाता है , तो प्रोग्राम निष्पादन का प्रवाह try
ब्लॉक से catch
ब्लॉक में स्थानांतरित हो जाता है। इसलिए, try
ब्लॉक के बाकी कोड को छोड़ दिया जाता है और catch
ब्लॉक में स्टेटमेंट निष्पादित किए जाते हैं।