स्टेटमेंट्स का एक ब्लॉक जिस तक कंट्रोल कभी भी किसी भी केस में नहीं पहुंच सकता उसे अनरीचेबल ब्लॉक्स कहा जा सकता है। अनरीचेबल ब्लॉक्स जावा द्वारा समर्थित नहीं हैं। Exception क्लास के रेफरेंस के साथ मेंशन किया गया catch ब्लॉक हमेशा अंतिम catch ब्लॉक होना चाहिए क्योंकि Exception सभी अपवादों का सुपरक्लास है। जब हम मल्टीपल catch ब्लॉक्स रखते हैं, तो catch ब्लॉक्स का क्रम सबसे विशिष्ट से सबसे सामान्य तक होना चाहिए। यानी Exception के सबक्लास पहले आने चाहिए और सुपरक्लास बाद में। यदि हम सुपरक्लास को पहले और सबक्लास को बाद में रखते हैं, तो कंपाइलर अनरीचेबल catch ब्लॉक एरर फेंकेगा।
सिंटैक्स
try {
// स्टेटमेंट्स
} catch(Exception e) {
System.out.println(e);
} catch(NumberFormatException nfe) {
// अनरीचेबल ब्लॉक। जावा द्वारा समर्थित नहीं, एरर की ओर ले जाता है।
System.out.println(nfe);
}
कंपाइलर द्वारा एक catch क्लॉज को रीचेबल माना जाता है यदि निम्नलिखित दोनों शर्तें सत्य हैं
- try ब्लॉक में फेंका गया एक चेक्ड अपवाद C के पैरामीटर को असाइन करने योग्य है।
- कोई पिछला catch क्लॉज नहीं है जिसका पैरामीटर टाइप C के पैरामीटर टाइप के बराबर या उसका सुपरटाइप हो।
कंपाइलर द्वारा रीचेबल माना जाने वाला एक catch क्लॉज अनरीचेबल हो सकता है यदि निम्नलिखित दोनों शर्तें सत्य हैं
- कैच क्लॉज पैरामीटर टाइप E में कोई अनचेक्ड अपवाद शामिल नहीं है।
- try ब्लॉक में फेंके गए सभी अपवाद जिनका टाइप E का (स्ट्रिक्ट) सबटाइप है, पहले से ही पिछले catch क्लॉज द्वारा संभाले जा चुके हैं।
उदाहरण
public class UnreachableBlock{
public static void main(String[] args) {
try {
int i = Integer.parseInt("abc"); // यह स्टेटमेंट NumberFormatException फेंकता है
} catch(NumberFormatException nfe) {
System.out.println("यह ब्लॉक NumberFormatException को संभालता है");
} catch(Exception e) {
System.out.println("यह ब्लॉक सभी अपवाद प्रकारों को संभालता है");
} catch (Throwable t) {
System.out.println("Throwable, Exception का सुपर क्लास है");
}
}
}
आउटपुट
यह ब्लॉक NumberFormatException को संभालता है