हाँ, हम एक try-catch ब्लॉक को दूसरे try-catch ब्लॉक के भीतर घोषित कर सकते हैं, इसे नेस्टेड try-catch ब्लॉक कहा जाता है।
नेस्टेड Try-Catch ब्लॉक
- यदि एक इनर try स्टेटमेंट में किसी विशेष एक्सेप्शन के लिए मिलान करने वाला catch स्टेटमेंट नहीं है, तो कंट्रोल अगले try स्टेटमेंट के कैच हैंडलर्स को ट्रांसफर हो जाता है जिनसे मिलान करने वाले कैच स्टेटमेंट की उम्मीद की जाती है।
- यह तब तक जारी रहता है जब तक कैच स्टेटमेंट्स में से एक सफल नहीं होता, या जब तक सभी नेस्टेड try स्टेटमेंट्स पूरे नहीं हो जाते।
- यदि कोई कैच स्टेटमेंट मेल नहीं खाता, तो Java रन-टाइम सिस्टम एक्सेप्शन को हैंडल करेगा।
- जब नेस्टेड try ब्लॉक्स उपयोग किए जाते हैं, तो इनर try ब्लॉक पहले निष्पादित होता है। इनर try ब्लॉक में थ्रो किया गया कोई भी एक्सेप्शन संबंधित कैच ब्लॉक में पकड़ा जाता है। यदि मिलान करने वाला कैच ब्लॉक नहीं मिलता है, तो आउटर try ब्लॉक के कैच ब्लॉक्स का निरीक्षण किया जाता है जब तक कि सभी नेस्टेड try स्टेटमेंट्स समाप्त नहीं हो जाते। यदि कोई मिलान करने वाला ब्लॉक नहीं मिलता है, तो Java रनटाइम एनवायरनमेंट निष्पादन को हैंडल करता है।
सिंटैक्स
try {
स्टेटमेंट 1;
स्टेटमेंट 2;
try {
स्टेटमेंट 1;
स्टेटमेंट 2;
}
catch(Exception e) {
// संबंधित एक्सेप्शन पकड़ें
}
} catch(Exception e) {
// संबंधित एक्सेप्शन पकड़ें
}
.............
उदाहरण
import java.io.*;
public class NestedTryCatchTest {
public static void main (String args[]) throws IOException {
int n = 10, result = 0;
try { // आउटर try ब्लॉक
FileInputStream fis = null;
fis = new FileInputStream (new File (args[0]));
try { // इनर try ब्लॉक
result = n/0;
System.out.println("The result is" + result);
}
catch(ArithmeticException e) { // इनर कैच ब्लॉक
System.out.println("Division by Zero");
}
}
catch (FileNotFoundException e) { // आउटर कैच ब्लॉक
System.out.println("File was not found");
}
catch(ArrayIndexOutOfBoundsException e) { // आउटर कैच ब्लॉक
System.out.println("Array Index Out Of Bounds Exception occured ");
}
catch(Exception e) { // आउटर कैच ब्लॉक
System.out.println("Exception occured" + e);
}
}
}
आउटपुट
Array Index Out Of Bounds Exception occuredकमांड लाइन आर्गुमेंट नहीं दिया गया (args[0] एक्सेस), इसलिए ArrayIndexOutOfBoundsException आउटर कैच ब्लॉक द्वारा पकड़ा गया। इनर ब्लॉक में ArithmeticException (n/0) होता लेकिन आउटर पहले फेल हो गया।