जावा में नेस्टेड ट्राई ब्लॉक
जावा में, एक कोशिश बयान दूसरे प्रयास के ब्लॉक के अंदर हो सकता है। इसे नेस्टेड ट्राई ब्लॉक कहा जाता है। हर बार एक कोशिश बयान दर्ज किया जाता है, उस अपवाद का संदर्भ ढेर पर धकेल दिया जाता है।
नेस्टेड ट्राई ब्लॉक का उपयोग क्यों करें
कभी-कभी ऐसी स्थिति उत्पन्न हो सकती है जहां ब्लॉक का एक भाग एक त्रुटि का कारण हो सकता है और संपूर्ण ब्लॉक स्वयं एक और त्रुटि उत्पन्न कर सकता है। ऐसे मामलों में, अपवाद संचालकों को नेस्टेड करना पड़ता है।
वाक्य - विन्यास
try {
statement 1;
statement 2;
try {
statement 1;
statement 2;
}
catch(Exception e) {
// catch the corresponding exception
}
}
catch(Exception e) {
// catch the corresponding exception
}
.............
// An example of nested try statements.
class NestTry {
public static void main(String args[]) {
try {
int a = args.length;
/* If no command-line args are present,
the following statement will generate
a divide-by-zero exception. */
int b = 42 / a;
System.out.println("a = " + a);
try { // nested try block
/* If one command-line arg is used,
then a divide-by-zero exception
will be generated by the following code. */
if(a==1) a = a/(a-a); // division by zero
/* If two command-line args are used,
then generate an out-of-bounds exception. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // generate an out-of-bounds exception
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out-of-bounds: " + e);
}
} catch(ArithmeticException e) {
System.out.println("Divide by 0: " + e);
}
}
}
कोई कमांड लाइन नहीं: जब आप प्रोग्राम को बिना कमांड-लाइन तर्कों के निष्पादित करते हैं, तो बाहरी कोशिश ब्लॉक द्वारा विभाजित-दर-शून्य अपवाद उत्पन्न होता है।
एक कमांड लाइन तर्क: एक कमांड लाइन तर्क के साथ प्रोग्राम का निष्पादन नेस्टेड कोशिश ब्लॉक के भीतर से विभाजित-दर-शून्य अपवाद उत्पन्न करता है। चूंकि आंतरिक ब्लॉक इस अपवाद को नहीं पकड़ता है, इसलिए इसे बाहरी कोशिश ब्लॉक में भेज दिया जाता है, जहां इसे संभाला जाता है।
दो कमांड-लाइन तर्क : यदि आप प्रोग्राम को दो कमांड-लाइन तर्कों के साथ निष्पादित करते हैं, तो आंतरिक प्रयास ब्लॉक के भीतर से एक सरणी सीमा अपवाद उत्पन्न होता है। यहां नमूना रन हैं जो प्रत्येक मामले का वर्णन करते हैं:
C:\>java NestTry
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One
a = 1
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One Two
a = 2
Array index out-of-bounds:
java.lang.ArrayIndexOutOfBoundsException:42
यह कभी-कभी अपरिहार्य होता है, खासकर यदि आपका पुनर्प्राप्ति कोड अपवाद फेंक सकता है। सुंदर नहीं, लेकिन कभी-कभी कोई विकल्प नहीं होता है।
साइड नोट्स
- यदि किसी आंतरिक प्रयास कथन में किसी विशेष अपवाद के लिए मिलान करने वाला कैच कथन नहीं है , तो नियंत्रण को अगले प्रयास कथन पकड़ने वाले हैंडलर में स्थानांतरित कर दिया जाता है जो मिलान करने वाले कैच कथन के लिए अपेक्षित होते हैं।
- यह तब तक जारी रहता है जब तक कि कोई एक कैच स्टेटमेंट सफल नहीं हो जाता , या जब तक सभी नेस्टेड ट्राई स्टेटमेंट नहीं हो जाते।
- यदि कोई कैच स्टेटमेंट मेल नहीं खाता है, तो जावा रन-टाइम सिस्टम अपवाद को हैंडल करेगा। हर बार एक कोशिश ब्लॉक में किसी विशेष अपवाद के लिए कैच हैंडलर नहीं होता है , तो उस अपवाद के लिए पैरेंट ट्राई ब्लॉक के कैच ब्लॉक का निरीक्षण किया जाता है, यदि मैच पाया जाता है कि कैच ब्लॉक निष्पादित होता है। यदि न तो ब्लॉक को पकड़ें और न ही पैरेंट कैच ब्लॉक अपवाद को हैंडल करें फिर रन-टाइम सिस्टम जनरेटेड संदेश अपवाद के लिए दिखाया जाएगा, जैसा कि हम देखते हैं जब हम अपवाद को हैंडल नहीं करते हैं।
- जब नेस्टेड try ब्लॉक का उपयोग किया जाता है, तो पहले inner try ब्लॉक को एक्सीक्यूट किया जाता है। आंतरिक प्रयास ब्लॉक में फेंके गए किसी भी अपवाद को संबंधित कैच ब्लॉक में पकड़ा जाता है। यदि मैचिंग कैच ब्लॉक नहीं मिलता है, तो बाहरी ट्राई ब्लॉक के कैच ब्लॉक का तब तक निरीक्षण किया जाता है जब तक कि सभी नेस्टेड ट्राई स्टेटमेंट समाप्त नहीं हो जाते। यदि कोई मेल खाने वाला ब्लॉक नहीं मिलता है, तो जावा रनटाइम एनवायरनमेंट निष्पादन को संभालता है।
// An example of nested try statements.
class NestTry {
public static void main(String args[]) {
try {
int a = args.length;
/* If no command-line args are present,
the following statement will generate
a divide-by-zero exception. */
int b = 42 / a;
System.out.println("a = " + a);
try { // nested try block
/* If one command-line arg is used,
then a divide-by-zero exception
will be generated by the following code. */
if(a==1) a = a/(a-a); // division by zero
/* If two command-line args are used,
then generate an out-of-bounds exception. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // generate an out-of-bounds exception
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out-of-bounds: " + e);
}
} catch(ArithmeticException e) {
System.out.println("Divide by 0: " + e);
}
}
}
C:\>java NestTry
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One
a = 1
Divide by 0: java.lang.ArithmeticException: / by zero
C:\>java NestTry One Two
a = 2
Array index out-of-bounds:
java.lang.ArrayIndexOutOfBoundsException:42
/* Try statements can be implicitly nested via
calls to methods. */
class MethNestTry {
static void nesttry(int a) {
try { // nested try block
/* If one command-line arg is used,
then a divide-by-zero exception
will be generated by the following code. */
if(a==1) a = a/(a-a); // division by zero
/* If two command-line args are used,
then generate an out-of-bounds exception. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // generate an out-of-bounds exception
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out-of-bounds: " + e);
}
}
public static void main(String args[]) {
try {
int a = args.length;
/* If no command-line args are present,
the following statement will generate
a divide-by-zero exception. */
int b = 42 / a;
System.out.println("a = " + a);
nesttry(a);
} catch(ArithmeticException e) {
System.out.println("Divide by 0: " + e);
}
}
}
पढ़ने के लिए धन्यवाद। हैप्पी लर्निंग
Mouad Oumous Java WhatsApp Group JOIN में शामिल हों
Mouad Oumous टेलीग्राम चैनल JOIN से जुड़ें
इसे फॉलो करके हमारे प्रकाशन का समर्थन करें

![क्या एक लिंक्ड सूची है, वैसे भी? [भाग 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































