जावा में त्रुटि प्रबंधन: try/catch और उससे आगे — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में त्रुटि प्रबंधन: try/catch और उससे आगे: A से Z तक

\n\n

त्रुटि प्रबंधन जावा में एक प्रमुख अवधारणा है जिसे प्रत्येक डेवलपर को सीखना चाहिए। कई भाषाओं के विपरीत, जावा अपवादों (exceptions) की एक सख्त और सुविचारित प्रणाली प्रदान करता है, जो विश्वसनीय और पूर्वानुमानित कोड लिखने में मदद करता है। इस लेख में हम सब कुछ कवर करेंगे: बुनियादी try/catch से लेकर उन्नत तंत्र जैसे try-with-resources और उपयोगकर्ता-परिभाषित अपवाद तक।

\n\n

1. मूल बातें: अपवाद क्या हैं और वर्ग पदानुक्रम

\n\n

अपवाद (exception) एक ऐसी घटना है जो प्रोग्राम के सामान्य निष्पादन प्रवाह को बाधित करती है। जावा में, सभी अपवाद Throwable से प्राप्त वर्गों के ऑब्जेक्ट हैं। पदानुक्रम की मुख्य शाखाएँ:

\n\n
    \n
  • Error — गंभीर समस्याएँ जिन्हें आमतौर पर संभाला नहीं जाता (जैसे, OutOfMemoryError)।
  • \n
  • Exception — अपवाद जिन्हें प्रोग्राम संभाल सकता है।
  • \n
  • RuntimeException (Exception का उपवर्ग) — रनटाइम अपवाद, जिन्हें संकलन चरण में जाँचना आवश्यक नहीं है।
  • \n
\n\n

सभी अपवाद दो प्रकारों में विभाजित हैं:

\n
    \n
  • Checked (जाँचे गए) — इन्हें संभालना अनिवार्य है। यदि आप इन्हें try/catch से नहीं संभालते या throws से घोषित नहीं करते, तो कंपाइलर कोड को संकलित नहीं करेगा। उदाहरण: IOException, SQLException।
  • \n
  • Unchecked (बिना जाँच के) — ये RuntimeException से प्राप्त होते हैं। इन्हें स्पष्ट रूप से संभालना आवश्यक नहीं है। उदाहरण: NullPointerException, ArithmeticException।
  • \n
\n\n

2. मुख्य तंत्र: try, catch, finally

\n\n

अपवाद प्रबंधन का मूल ब्लॉक तीन भागों से बना है:

\n\n
try {\n    // कोड जो अपवाद फेंक सकता है\n    int result = 10 / 0;\n} catch (ArithmeticException e) {\n    // अपवाद को संभालना\n    System.err.println("त्रुटि: शून्य से भाग!");\n} finally {\n    // यह ब्लॉक हमेशा निष्पादित होता है (भले ही अपवाद हुआ हो)\n    System.out.println("finally ब्लॉक निष्पादित हुआ।");\n}
\n\n

महत्वपूर्ण बिंदु:

\n
    \n
  • विभिन्न प्रकार के अपवादों के लिए एक या अधिक catch ब्लॉक हो सकते हैं।
  • \n
  • finally ब्लॉक वैकल्पिक है, लेकिन संसाधनों (फ़ाइलों, कनेक्शनों) को बंद करने के लिए उपयोगी है।
  • \n
  • यदि अपवाद पकड़ा नहीं जाता, तो यह कॉल स्टैक में ऊपर फेंक दिया जाता है।
  • \n
\n\n

Multi-catch (Java 7+) — एक ही ब्लॉक में कई प्रकार के अपवादों को पकड़ने की अनुमति देता है:

\n\n
try {\n    // कोड\n} catch (IOException | SQLException e) {\n    System.err.println("इनपुट-आउटपुट या SQL त्रुटि: " + e.getMessage());\n}
\n\n

3. Try-with-resources: स्वचालित संसाधन बंद करना

\n\n

Java 7 से शुरू होकर, try-with-resources तंत्र आया, जो AutoCloseable (या Closeable) इंटरफ़ेस को लागू करने वाले संसाधनों को स्वचालित रूप से बंद करता है। यह फ़ाइलों, सॉकेट्स आदि को बंद करने के लिए finally लिखने की आवश्यकता को समाप्त करता है।

\n\n
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {\n    String line = reader.readLine();\n    System.out.println(line);\n} catch (IOException e) {\n    System.err.println("फ़ाइल पढ़ने में त्रुटि: " + e.getMessage());\n} // reader स्वचालित रूप से बंद हो जाता है
\n\n

लाभ:

\n
    \n
  • कोड साफ और छोटा हो जाता है।
  • \n
  • संसाधन सही क्रम में बंद होते हैं (उनके निर्माण के विपरीत क्रम में)।
  • \n
  • यदि try ब्लॉक और बंद करने के दौरान दोनों में अपवाद फेंका जाता है, तो दबा हुआ अपवाद (suppressed) मुख्य अपवाद में जोड़ा जाता है।
  • \n
\n\n

आप अर्धविराम के माध्यम से कई संसाधन घोषित कर सकते हैं:

\n\n
try (BufferedReader br = new BufferedReader(new FileReader("in.txt"));\n     BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"))) {\n    // कोड\n} catch (IOException e) {\n    System.err.println("त्रुटि: " + e.getMessage());\n}

ब्लॉग

पुस्तक अनुशंसाएँ