হ্যাঁ, আমরা একটি try-catch ব্লকের ভিতরে অন্য try-catch ব্লক ডিক্লেয়ার করতে পারি, এটাকে নেস্টেড try-catch ব্লক বলা হয়।
নেস্টেড Try-Catch ব্লক
- যদি একটি ইনার try স্টেটমেন্ট-এর কোনো ম্যাচিং catch স্টেটমেন্ট না থাকে নির্দিষ্ট এক্সেপশনের জন্য, তবে কন্ট্রোল পরবর্তী try স্টেটমেন্টের catch হ্যান্ডলার-এ ট্রান্সফার হয় যা ম্যাচিং catch স্টেটমেন্টের জন্য অপেক্ষা করছে।
- এটি চলতে থাকে যতক্ষণ না একটি catch স্টেটমেন্ট সাফল্য হয়, অথবা সব নেস্টেড try স্টেটমেন্টগুলো শেষ হয়।
- যদি কোনো catch স্টেটমেন্ট ম্যাচ না করে, তবে জাভা রান-টাইম সিস্টেম এক্সেপশনটি হ্যান্ডেল করবে।
- যখন নেস্টেড try ব্লক ব্যবহার করা হয়, ইনার try ব্লক প্রথমে এক্সিকিউট হয়। ইনার try ব্লকে থ্রো হওয়া যেকোনো এক্সেপশন সংশ্লিষ্ট catch ব্লক-এ ক্যাচ হয়। যদি ম্যাচিং catch ব্লক না পাওয়া যায়, তবে আউটার try ব্লক-এর catch ব্লকগুলো চেক করা হয় যতক্ষণ না সকল নেস্টেড try স্টেটমেন্ট শেষ হয়। কোনো ম্যাচিং ব্লক না পেলে জাভা রান-টাইম এনভায়রনমেন্ট এক্সিকিউশন হ্যান্ডেল করে।
সিনট্যাক্স
try {
statement 1;
statement 2;
try {
statement 1;
statement 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) { // ইনার catch ব্লক
System.out.println("Division by Zero");
}
}
catch (FileNotFoundException e) { // আউটার catch ব্লক
System.out.println("File was not found");
}
catch(ArrayIndexOutOfBoundsException e) { // আউটার catch ব্লক
System.out.println("Array Index Out Of Bounds Exception occured ");
}
catch(Exception e) { // আউটার catch ব্লক
System.out.println("Exception occured"+e);
}
}
}
আউটপুট
Array Index Out Of Bounds Exception occured