যে ব্লক অফ স্টেটমেন্টগুলোর तरफ কন্ট্রোল কখনো পৌঁছাতে পারে না কোনো কেসে, সেগুলোকে unreachable blocks বলা হয়। জাভা unreachable blocks সাপোর্ট করে না। Exception ক্লাসের রেফারেন্সের সাথে যে catch block মেনশন করা থাকে সেটি সবসময় শেষের catch block হতে হবে কারণ Exception সকল এক্সেপশনের সুপারক্লাস। যখন একাধিক catch block রাখি, catch blocks-এর ক্রম অবশ্যই সবচেয়ে স্পেসিফিক থেকে সবচেয়ে জেনারাল হতে হবে। অর্থাৎ Exception-এর সাবক্লাসগুলো প্রথমে আসবে এবং সুপারক্লাসগুলো পরে। যদি সুপারক্লাসগুলো প্রথমে এবং সাবক্লাসগুলো পরে রাখা হয়, তবে কম্পাইলার unreachable catch block error থ্রো করবে।
সিনট্যাক্স
try {
// statements
} catch(Exception e) {
System.out.println(e);
} catch(NumberFormatException nfe) {
//unreachable block. জাভা দ্বারা সাপোর্ট করা নয়, এরর হয়।
System.out.println(nfe);
}
একটি catch clause কম্পাইলার দ্বারা reachable মाना হয় যদি নিচের দুটি কন্ডিশন true হয়
- try ব্লকে থ্রো করা একটি চেকড এক্সেপশন C-এর প্যারামিটারের সাথে অ্যাসাইনযোগ্য।
- কোনো পূর্ববর্তী catch clause নেই যার প্যারামিটার টাইপ C-এর প্যারামিটার টাইপের সমান বা সুপারটাইপ।
একটি catch clause কম্পাইলার দ্বারা reachable মाना হয় এমনকি unreachable হতে পারে যদি নিচের দুটি কন্ডিশন true হয়
- Catch clause প্যারামিটার টাইপ E যেকোনো আনচেকড এক্সেপশন ইনক্লুড করে না।
- try ব্লকে থ্রো করা সকল এক্সেপশন যাদের টাইপ E-এর (স্ট্রিক্ট) সাবটাইপ, সেগুলো ইতিমধ্যে পূর্ববর্তী catch clauses দ্বারা হ্যান্ডেল করা হয়েছে।
উদাহরণ
public class UnreachableBlock{
public static void main(String[] args) {
try {
int i = Integer.parseInt("abc"); //এই স্টেটমেন্ট NumberFormatException থ্রো করে
} catch(NumberFormatException nfe) {
System.out.println("This block handles NumberFormatException");
} catch(Exception e) {
System.out.println("This block handles all exception types");
} catch (Throwable t) {
System.out.println("Throwable is super class of Exception");
}
}
}
আউটপুট
This block handles NumberFormatException