हां, Java में हम एक try ब्लॉक के साथ एकाधिक (multiple) catch ब्लॉक परिभाषित कर सकते हैं।
- हर
tryब्लॉक कम से कम एकcatchब्लॉक से जुड़ा होना चाहिए (याfinallyब्लॉक)। - जब भी
tryब्लॉक में कोई अपवाद ऑब्जेक्ट पहचाना जाता है और यदि एकाधिकcatchब्लॉक हैं, तोcatchब्लॉक को प्राथमिकता उस क्रम के आधार पर दी जाती है जिसमें वे परिभाषित किए गए हैं। - सबसे पहली प्राथमिकता हमेशा पहले
catchब्लॉक को दी जाती है। यदि पहलाcatchब्लॉक पहचाने गए अपवाद ऑब्जेक्ट को हैंडल नहीं कर सकता, तो यह तुरंत अगलेcatchब्लॉक पर विचार करता है। catchब्लॉक्स को विशिष्ट से सामान्य (specific to general) क्रम में रखना चाहिए। यानी सबक्लास अपवाद पहले, फिर सुपरक्लास अपवाद (जैसेException)।
उदाहरण
class TryWithMultipleCatch {
public static void main(String args[]) {
try {
int a[] = new int[5];
a[3] = 10 / 0; // ArithmeticException आएगा
System.out.println("First print statement in try block");
} catch (ArithmeticException e) {
System.out.println("Warning: ArithmeticException");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Warning: ArrayIndexOutOfBoundsException");
} catch (Exception e) {
System.out.println("Warning: Some Other exception");
}
System.out.println("Out of try-catch block");
}
}
आउटपुट
Warning: ArithmeticException Out of try-catch block
व्याख्या
उपरोक्त उदाहरण में a[3] = 10 / 0 स्टेटमेंट ArithmeticException फेंकता है (0 से विभाजन)। चूंकि पहला catch ब्लॉक ArithmeticException को हैंडल करता है, इसलिए वही निष्पादित होता है। बाकी catch ब्लॉक नजरअंदाज कर दिए जाते हैं।
महत्वपूर्ण नियम
- क्रम मायने रखता है: सबक्लास अपवाद पहले, सुपरक्लास बाद में। अगर आप
catch (Exception e)को पहले रख देंगे, तो वह सभी अपवादों को पकड़ लेगा और बाद के विशिष्टcatchब्लॉक अनरीचेबल (unreachable) हो जाएंगे, जिससे कंपाइल टाइम एरर आएगा। finallyब्लॉक वैकल्पिक है लेकिन यदि मौजूद है तो सभीcatchब्लॉक्स के बाद आता है।- Java 7+ में मल्टी-कैच (Multi-catch) का उपयोग करके एक ही
catchब्लॉक में कई अपवाद प्रकारों को पकड़ा जा सकता है:catch (IOException | SQLException e)।
Java 7+ Multi-catch उदाहरण
try {
// कोड जो IOException या SQLException फेंक सकता है
} catch (IOException | SQLException e) {
// दोनों अपवादों को यहां हैंडल करें
e.printStackTrace();
}
निष्कर्ष: मल्टीपल catch ब्लॉक विभिन्न प्रकार के अपवादों को अलग-अलग तरीके से हैंडल करने की अनुमति देते हैं। सही क्रम (विशिष्ट से सामान्य) बनाए रखना महत्वपूर्ण है।